1

問題がどこにあるのかよくわかりません。コードは正常に機能していますが、いくつかの単語を入力した後、次のようになります。

終わり

それは私に示しています:

ヌル。

私の推測は文字列kまたは配列のサイズです。だから、どういうわけか「終わり」の仕事を入力する必要があると思います、私は正しいですか?

public static void main(String[] args) {
  Scanner sc = new Scanner(System. in );


  String type;
  String word;
  String words[] = new String[100];
  int i = 1;

  String k = "end";
  System.out.println("Type a word: ");
  word = sc.next();


  while (word.compareToIgnoreCase(k) != 0) {

    words[i] = word;
    i = i + 1;
    word = sc.next();
  }

  System.out.println("What type A,B,C:");
  typ = sc.next();

  if (typ.equals("B")) {
    int lenght = words.length;
    lenght = i + 1;
    i = 1;
    while (i < lenght) {
      System.out.print(words[i]);
      System.out.println();

      i = i + 1;
    }
  }
}
}
4

4 に答える 4

2

その最後の単語を配列に追加する必要があります。

while (word.compareToIgnoreCase(k) != 0) {

  words[i] = word;
  i = i + 1;
  word = sc.next();
}
words[i] = word; // Add the last item entered

ちなみに、のList<String>代わりにを使用してString[]、を呼び出すことをお勧めしwords.add(word)ます。一つには、これはあなたがあなたのインデックスを追跡する必要がないことを意味します(i)。さらに重要なことに、リストは好きなだけ長くすることができ、必要なだけのメモリを使用します。

于 2013-01-13T23:33:23.827 に答える
0
String type;
  String word;
  String words[] = new String[100];
  int i = 0;

  String k = "end";
  System.out.println("Type a word: ");
  word = sc.next();
words[i] = word;

  while (word.compareToIgnoreCase(k) != 0) {    
    i = i + 1;
    word = sc.next();
    words[i] = word;
  }

  System.out.println("What type A,B,C:");
  typ = sc.next();

  if (typ.equals("B")) {
    int lenght = words.length;
    i = 0;
    while (i < lenght-1) {
      System.out.print(words[i]);
      System.out.println();

      i = i + 1;
    }
  }
}

}

于 2013-01-13T23:54:10.517 に答える
0

配列は「1」ではなく「0」で始まります。

// Better
int i = 0
...
while (word.compareToIgnoreCase(k) != 0) {
    words[i++] = word;
    word = sc.next();
}

i = 0;
while (i < length) {
  System.out.print(words[i++]);
  System.out.println();
}

あなたの論理には私にはわからないことがいくつかありますが、おそらく毎回1つの「単語」を追加したいと思うでしょう。

そして、おそらくインデックス「0」で開始し、「長さ-1」で停止することをお勧めします。「array[length]」以降のすべての要素はデフォルトで「null」になるためです。

于 2013-01-13T23:34:21.147 に答える
0

問題は、配列に何かを追加する最初のループで、割り当てを行った後にカウンターをインクリメントすることです。これは、最後のインデックスが長さ+1を表すことを意味します。

したがって、1から開始します(ただし、Java配列は0から開始するため、配列の最初のエントリに値を割り当てることはありません。それが意図的なものかどうかはわかりません)。

したがって、Catを追加すると、インデックスは2になります。

さらに下に行くと、長さに1を追加します。

長さ=i+ 1;

最も簡単な答えは、この1行を削除することですが、この中のコードの量を減らすために実行できるリファクタリングは他にもたくさんあります。

于 2013-01-13T23:36:22.907 に答える