我不太确定,问题出在哪里。 代码工作正常,但在我输入几个字之后,即:
猫
猫
结束
它告诉我:
猫
猫
空。
我的猜测是在字符串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;
}
}
}
}
答案 0 :(得分: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
)。更重要的是,列表可以随意获取,并且您只需使用尽可能多的内存。
答案 1 :(得分: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”。
答案 2 :(得分:0)
你的问题是,在第一个循环中你向数组添加东西,你在完成赋值后递增计数器。这意味着末尾的索引表示长度+ 1。
所以你从1开始(虽然Java数组从0开始,所以你永远不会为数组中的第一个条目赋值,不确定这是否是故意的。)
因此,当您添加Cat时,索引将变为2。
再向下,然后用
加1到长度lenght = i + 1;
最简单的答案是删除这一行,尽管你可以做很多其他的重新分解来减少代码量。
答案 3 :(得分: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;
}
}
}
}