ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュのメソッド呼び出しについて

  • mixiチェック
  • このエントリーをはてなブックマークに追加
こんにちは,Javaの勉強中です。
strings.splitメソッドを使って、文字列を配列に入れて、それを表示しようとしているのですが
コンパイル後実行しようとすると上手く行かず以下のエラーが出ます。

Exception in thread "main" java.lang.NullPointerException
at StringSplitTest.<init>(CreateStringsTest.java:5)
at CreateStringsTest.main(CreateStringsTest.java:26)

アドバイスよろしくお願いします。

---------------ソースです。-------------

class StringSplitTest {

  public String strings ;
  public String regex ;
  public String[] tmp_strs = strings.split(regex);

  StringSplitTest(String st){
   strings = st;
  }


  void splitTry(String strings){
  for(int i=0; i<tmp_strs.length; i++){
    System.out.print("["+tmp_strs[i]+"]");
    }
  System.out.println();
  }
}



class CreateStringsTest{
  public static void main(String[] args){

  String strings = "a,b,c,d,e,f";
  StringSplitTest obj = new StringSplitTest(strings);

  obj.splitTry(strings);
 }
}

コメント(45)

あ、エラーの意味がわからないんですかね。
変数になんの値も入っていないのにその変数のメソッドを呼び出してはダメだろ、という意味です。
バグです。
> 3
どこにクラス変数があるの?

> 6
「変数のメソッド」って Java にあるの?

#用語は正しく使いましょー
皆さん、ありがとうございます。

よくわかっていないので、stringsではなくstrings_と変更して考えていますが、変数になんの値も入っていないとは、ここら辺りがまずいのでしょうか。

String strings_ = "a,b,c,d,e,f";
StringSplitTest obj = new StringSplitTest(strings_);

obj.splitTry(strings_);

よろしくお願いします。

------------ソースもう一度貼り付けます-------------

class StringSplitTest {

public String strings_ ;
public String regex ;
public String[] tmp_strs = strings_.split(regex);

StringSplitTest(String st){
strings_ = st;
}

void splitTry(String strings_){
for(int i=0; i<tmp_strs.length; i++){
System.out.print("["+tmp_strs[i]+"]");
}
System.out.println();
}
}

class CreateStringsTest{
public static void main(String[] args){

String strings_ = "a,b,c,d,e,f";
StringSplitTest obj = new StringSplitTest(strings_);

obj.splitTry(strings_);
}
}

Yebisuさん、ありがとうございます。

tmp_strs の代入をコンストラクタの中に移動にトライ中です。
まだ上手く行ってません。
> まだ上手く行ってません

エスパー力を駆使して解読すると、「Exception は起きなくなったけど、思った通りに動きません」ってこと ?

なら、split() が何をキーにしているか見直してみたら ?
以下のように変えてみましたが、実行時に同じエラーになります。


class StringSplitTest {

public String strings_ ;
public String regex ;
public String[] tmp_strs = strings_.split(regex);

StringSplitTest(String st, String reg){
strings_ = st;
regex = reg;
tmp_strs = strings_.split(regex);
}

void splitTry(String strings_){
for(int i=0; i<tmp_strs.length; i++){
System.out.print("["+tmp_strs[i]+"]");
}
System.out.println();
}
}

class CreateStringsTest{
public static void main(String[] args){

String strings_ = "a,b,c,d,e,f";
String regex = ",";
StringSplitTest obj = new StringSplitTest(strings_, regex);

obj.splitTry(strings_);
}
}

それでは、「移動」ではなく「コピペ」
1.
public String[] tmp_strs = strings_.split(regex);
この初期化はありえませんね。
初期化時に「strings_」は空っぽ(null)です。

2.
-class CreateStringsTest{
+public class CreateStringsTest{

3.
splitTryメソッドに与えた引数が使われてませんが…?

4.
ぶっちゃけ、「_」付ける付けないは今回の問題とは一切関係しませんよ。
可読性がよくなることは、バグを減らす、探しやすく、修正しやすくといいことはありますが、
バグがなくなることはないので。

5.
あまり学習に向いていない問題だと思います。
文字列分割のために新たにクラスを作ることは、ほぼ有り得ません。
作るならよほど特殊な分割になるかと。(語句解析とか)
Yebisuさん、檸檬さん、ありがとうございました。

初期化の所は全く気が付きませんでした。言われてみて分かりました。ありがとうございます。
3.の引数は必要がないので取りました。
5.何行かの命令文を各行の最初の文字を解析して別のパターンのメソッドを動かそうとする為に使おうと思ってました。

変更して、思ったような結果を得られるようになったのですが、ソースを貼ってみます。

class StringSplitTest {

public String strings_ ;
public String regex ;
public String[] tmp_strs ;

StringSplitTest(String st, String reg){
this.strings_ = st;
this.regex = reg;
this.tmp_strs = strings_.split(regex);
}

void splitTry(){
for(int i=0; i<tmp_strs.length; i++){
System.out.print("["+tmp_strs[i]+"]");
}
System.out.println();
}
}


public class CreateStringsTest{
public static void main(String[] args){

String strings_ = "a,b,c,d,e,f";
String regex = ",";
StringSplitTest obj = new StringSplitTest(strings_, regex);

obj.splitTry();
}
}

> 初期化の所は全く気が付きませんでした。言われてみて分かりました。

Exception がどこがダメなのか、ちゃんと教えてくれてるよ。
もう一度、Exception を読みなおしてみそ
Yebisuさん、ありがとうございます。

最初のエラーメッセージで書いてあったのですね。
もっとエラーメッセージからトラブルシュート出来るようにがんばります。

まだ"NullPointerException"がピンときていませんが、調べてみます。
> どこにクラス変数があるの?
初心者向けのJava本でも書いてるからそれを読めばわかるぞ。

>「変数のメソッド」って Java にあるの?
stringsが変数ということがわからないならJava以前の問題だな。プログラムの基本から学習することを薦めるよ。
>まだ"NullPointerException"がピンときていませんが、調べてみます。

6を見てください。
ん?
「クラス変数」ってstaticな(インスタンスでなく)クラスに属する変数のことだよね?
多分、このコードにその意味のクラス変数は登場していないと思うけど。

変数にメソッドが従属している分けではない、という意味では「変数のメソッド」はないっちゃないね。
>「クラス変数」ってstaticな(インスタンスでなく)クラスに属する変数のことだよね?

んー。この辺は慣習だよね。オブジェクト変数と呼ぶ奴もいるわけだし。
広義ではクラス変数でもいいんじゃないの?
通じればいいんだよ。言葉は正確にとかのレベルじゃない。

>変数にメソッドが従属している分けではない、という意味では「変数のメソッド」はないっちゃないね。

本気で云ってるわけないよね(笑
クラス(インスタンスでもいいけど)の変数はクラス(これもインスタンスでもいいけど)なんだからメソッドあるだろって話。こんなの基礎の基礎。
strings_が変数じゃないとかありえないから。
間違った用語や慣習を初心者に教えるなよ
>22
「お前は間違ってる」だけでは何も云っていないのと同じ。何が間違ってるかを説明しないと唯の喧嘩だろ。
それとも喧嘩コミュとかで続ける?

変数にメソッドがないって云うなら
String fuga;
にはメソッドがないってことになる。
それが正しいと思ってるならJava入門を読み直したほうがいい。

初心者が初心者に何かを教えようとするとこういう風に訳分からなくなる。
もう少し自覚して欲しいなぁ。
多分、これは変数って言葉の定義の話じゃないかな?
メソッドを持っているのは、変数ではなく変数の先にある実体である、と考えるなら、変数その物にはメソッドは無い。

クラス変数は、google検索の結果を見るに、Java界隈でクラス変数をインスタンス変数とかと同義にしてる慣習は、すごく少なそうだけど。
> 24

初心者向けのJava本に書いてあるはずだから、これ以上はいいんでは?
他の人に間違った情報が伝染しなければ、それでいいと思うよ
クラス変数は、クラスに従属する変数だから、
>20でseraph様が仰ってる解釈が正しいと思いますし、
広義も狭義もなく、インスタンス変数というのが正しいと思います。

クラス変数/インスタンス変数辺りは、
勉強の最初のあたりでよく躓くところだと思いますので、
有識者の方はご自身が誤解を招く発言をした場合は素直に訂正するのが良いと思います。


変数のメソッド。
String aaa;
にメソッドはあるけれど、
Strign bbb;
にもある。
aaaだけのものはない。
と言う意味で、「変数に」メソッドはないのでは、と思います。
変数は、ただの容れ物ですよね。
ふーん。
俺はクラス変数って云い方をする現場いた事もあるが、それで困ったことはないし相当レベルの高い技術者ともそのレベルで話すし通じる。

動的変数をクラス変数と呼ぶことがあるのはいろいろ理由があるだろうが、おそらくJavaを知らない人が設計者にいるとそうなるのではないかと思う。現場ではコミュニケーションを重視するからこそ、あえて正確な云い方を避けることがある。正確な云い方にこだわると伝達速度が遅れるからだ。インスタンス変数と云うとかえって混乱する。だがクラス変数なら通じやすい。

逆に言えば、クラス変数が静的変数のみなどという固定概念は危険ですらある。現場で必ずしもそれは通用しない。

識別のため使いわけるべきと云う奴もいるが、それなら最初から静的変数とかstatic変数と云えばいい。
>>27のchunさんの発言が、私には言い訳にしか聞こえないので、
多分現場では通用しない技術者なんでしょうね私は。

>>28 もけさん
ですね。この件に関してはレスするのをやめます。
参加者の方々お目汚し失礼しました┏○ペコ
>32
俺は何も主張していないので議論になってないと思うが。
別にクラス変数がstatic変数と云うことを否定するつもりはない。
つかそんな議論する意義もない。
どうでもいいし興味もない。

ただ、動的変数をクラス変数と俺が云ったことに噛み付いてきた奴がいたから説明しただけ。

トピのstringを俺がクラス変数と云ったのはローカル変数に同じ名称の変数があったから区別するため。その語彙を使ったのはインスタンス変数というより伝わりやすいと判断したに過ぎない。
>27のchunさんの発言が、私には言い訳にしか聞こえないので、
>多分現場では通用しない技術者なんでしょうね私は。

そういうことじゃない。
もっと柔軟に対応すればって事だよ。

>ですね。この件に関してはレスするのをやめます。

えー。
自分から振っておいてそれですか(笑
俺はこの件で主張したいことなんてないから無理。
もけさんを始めchunを除く全ての人へ
このコミュニティに長くおられる方はもうご存知かと思いますが、chunは荒らしです
無視しましょう
周知徹底しましょう
自分しか見えていない人はどこでも通用しません
>クレタ人様

人の日記に嫌がらせの書き込みをするのはマジでやめてください。あなたのコメントは消しました。
chunはついにでっちあげにまで手を出したか…
まぁ荒らしの言うことなど信用するに値しないが
>43
日記にって最低だろ。マジで。
少しは常識をわきまえろよ。

ログインすると、残り13件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング