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

顺便说一句,我建议使用 aList<String>而不是 aString[]并调用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

数组从“0”开始,而不是“1”。

// 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();
}

关于您的逻辑有几件事我不明白,但我假设您可能每次都想添加一个“单词”。

而且我几乎可以肯定您可能想从索引“0”开始,并在“length-1”处停止。因为“array[length]”和所有后续元素将默认为“null”。

于 2013-01-13T23:34:21.147 回答
0

您的问题是,在第一个循环中,您将事物添加到数组中,您在完成分配后会增加计数器。这意味着您最后的索引表示长度 + 1。

所以你从 1 开始(尽管 Java 数组从 0 开始,所以你永远不会为数组中的第一个条目赋值,不确定这是否是故意的)。

因此,当您添加 Cat 时,索引变为 2。

再往下,然后将长度加 1,与

长度 = 我 + 1;

最简单的答案是删除这一行,尽管您可以进行许多其他重构来减少其中的代码量。

于 2013-01-13T23:36:22.907 回答