摆脱数组中的null。 Java的

时间:2013-01-13 23:26:46

标签: java arrays loops while-loop

我不太确定,问题出在哪里。 代码工作正常,但在我输入几个字之后,即:

结束

它告诉我:

空。

我的猜测是在字符串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 个答案:

答案 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;
    }
  }
}

}