2016-05-01 26 views
1

私は単純なスポーツシミュレータを作っています。最初は、両方のチームにフォーマット(CityName TeamName、たとえばChicago Bulls)でプレーするように入力する必要があります。私は都市の名前とチーム名を最初の名前から取得するために2つの方法を使用しているので、より自然に見える出力のために別の場所で呼び出すことができます。部分文字列を使って文字列を分割する

public String getLocation(String teamName){ 
    String location = this.name.substring(0, this.name.indexOf(" ")); 
    return location; 
} 

public String getFirstName(String teamName){ 
    String name = this.name.substring(this.name.indexOf(" ")); 
    return name; 
} 

場所を取得するための最初の方法は正常に動作します。チーム名を取得するための2つ目は、毎回nullを返します。なぜ私は異なる結果が得られるのか、私は2人で何をしたのか分かりません。

編集:ここでは

は、これらのメソッドを実装しているラインです。

System.out.println("The " + TeamX.getFirtName(TeamX.getName()) + " are visting from " + TeamX.getLocation(TeamX.getName()) + " to play the " + TeamY.getFirtName(TeamY.getName()) + " in " + TeamY.getLocation(TeamY.getName())); 

そして、それに対する出力 "NYCジェッツ" と "アリゾナ・カーディナルスは、" されています:

The null are visting from NYC to play the null in Arizona 
+0

'teamName'とどのようにそれがthis.name''に関係ない何ですか?また、どちらのメソッドからも 'null'を取得することとは非常に異なっているようです。万が一空の文字列( '' '')を意味しますか? – NPE

+0

私は2つのことに気付きましたが、最初の質問に取り組んでいると言いました。 – sbowde4

+0

彼はちょうど2つのパラメータを指定した解決策を説明しました – DarkV1

答えて

0

チーム名の間には常にスペースがありますか?また...あなたは最初のインデックスだけを指定しましたか?ない最後の...

問題は、あなたがそれを初期化する必要がある文字列内のインデックスまたは値を検索する場合は文字列が...元々nullであるということです、私はそれをreedited-

public String getFirstName(String teamName){ 
    String name = teamName; 
    name =name.substring(name.indexOf(" "),name.length()); 
    // you for got the second parameter for the substring Thats why it returned null as you only found " ". 

    return name; 
} 

...その部分文字列を呼び出す前に

文字列名= teamName;

+0

ああ問題があります。 – DarkV1

+0

彼は仕事がうまくいかなかったために私のことを指摘しました – sbowde4

+0

@andrewxt名前はorginallyであるため、 – DarkV1

0

以前の投稿では、部分文字列が1つのパラメータしか扱えないということはわかりませんでした。他の人が述べたように、名前がnullの変数であり、第一、私は関数内でローカル変数teamNamethis.name上の部分文字列を呼び出すとされていないため、問題があると考えていTEAMNAME

String name = teamName; 
    name = this.name.substring(this.name.indexOf(" ")) 
+0

私は、1つのパラメータしかなければ、その時点で開始し、最後に行くという印象を受けました。残念ながら、この修正はnullを返すことを止めませんでした。 – andrewxt

+0

まだ2つのパラメータ、つまり部分文字列の動作が必要です。私は、あなたが決して 'name = teamName'を設定していないかもしれないと信じています。 – sbowde4

+1

@andrewxt *"私は印象の下にあったのは、ただ1つのパラメータがあれば、その時点で開始し、この答えは間違っています。 (OPの現在のコードのように動作しますが、ここでの修正はありません) – Tom

2

に等しくなるように設定する必要があります

public String getLocation(String teamName){ 
    return teamName.substring(0, teamName.indexOf(" ")); 
} 

public String getFirstName(String teamName){ 
    return teamName.substring(teamName.indexOf(" ")); 
} 
+0

それは彼がorigniallyとしてnullの文字列を持っていたので、それを部分文字列にしようとしました...したがって、彼は文字列名=チーム名を返す必要がありますので、名前を返します – DarkV1

+0

@ DarkV1 。そして、彼は開始指数を修正すべきです。 – Tom

+0

@Tom Imaもしthis.nameが静的変数またはインスタンス変数....であり、彼がteamNameとして入力する変数 – DarkV1

2

いつもスペースがありますか?その後、あなたは良いオールを使用することができますので」都市とチーム名

そうそうある第2の1である第1の1と文字列の2要素の配列を返します

fullname.split(' '); 

を分割します。私は質問を読んだ後、私はOPがクラスを正しく使う方法を知っているかどうか疑問に思っています...クラスの属性を自分自身に渡すことは奇妙に思えます...

チームはフルチーム変数はインスタンス変数として保存され、内部的にクラス変数を使用する単純な呼び出しteamx.getFirstName()... getLocationと同じ

+0

これは別のアプローチですが、チーム名に常にスペースがあるかどうかはまだ明確になっていません:/ – DarkV1

+0

@ DarkV1はい、間にスペースを1つ入れて入力するだけです。 – andrewxt

+0

@ DarkV1私は彼の現在のindexOf( '')の使用から推測しました。しかし、あなたは彼らが仮定について何を言うか知っています... – karina

2

まず、関数のパラメータは使用されません。そして、あなたはこれらの関数がどのように呼び出されるかを示していません。 '名前'はメインクラスの指示で変更される可能性がある属性のようです。ちなみに、 "String name = this.name.sub ..."はうまく動作していてもうまくないです。

スプリット機能を試してみてください:

public String getLocation(String teamName){ 
    return teamName.split(" ")[0]; 
} 

public String getFirstName(){ 
    return teamName.split(" ")[1]; 
}