【问题标题】:Getting rid of null in array. Java摆脱数组中的空值。爪哇
【发布时间】:2012-12-27 21:10:59
【问题描述】:

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

结束

它告诉我:

空。

我的猜测是字符串 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;
    }
  }
}
}

【问题讨论】:

  • 当然,还有两个选项可以格式化文本 A 和 C。但我现在想专注于那个“空”的东西。
  • 一个建议:在发布int lenght = words.lenght; 之前尝试清理代码什么都不做(lenght 在下一行被覆盖)。而正确的拼写是length(虽然这和编程无关)

标签: java arrays loops while-loop


【解决方案1】:

您只需将最后一个单词添加到数组中:

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

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

顺便说一句,我建议使用List&lt;String&gt; 而不是String[],并调用words.add(word)。一方面,这意味着您不必跟踪索引 (i)。更重要的是,列表可以随心所欲,而且您只会使用所需的内存。

【讨论】:

    【解决方案2】:

    数组从“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”。

    【讨论】:

      【解决方案3】:

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

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

      所以当你添加 Cat 时,索引变为 2。

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

      长度 = i + 1;

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

      【讨论】:

        【解决方案4】:
        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;
            }
          }
        }
        

        }

        【讨论】:

          猜你喜欢
          • 2021-06-10
          • 2012-10-11
          • 2010-10-12
          • 1970-01-01
          • 2018-05-01
          • 1970-01-01
          • 2016-07-24
          • 1970-01-01
          • 2011-01-07
          相关资源
          最近更新 更多