为什么在字符串数组之前在字符串之前打印null?

时间:2015-11-10 10:41:23

标签: java arrays terminal null output

很抱歉,如果在我没有看到它问到堆栈溢出之前已经问过这个问题。 代码提示用户输入其名称和模块标记,然后在最后将名称和模块标记打印给用户。

public class Main
{
  public static void main( String args[] )
  {
      String name_array[] = new String[4];
      int mark_array[] = new int[4];
      System.out.println("Please enter in your name");
      String name = BIO.getString();
      System.out.println("Please enter in your module mark");
      int mark = BIO.getInt();

      name_array[0] += name;
      mark_array[0] += mark;

      int i = 1;
      int z = 1;
      while ( ! name.equals("END"))
      {
          while ( ! name.equals("END"))
          {
              System.out.println("Please enter in your name");
              name = BIO.getString();

              name_array[i] += name;
              ++i;
              break;
          }
          while ( ! name.equals("END"))
          {
              System.out.println("Please enter in your module mark");
              mark = BIO.getInt();

              mark_array[z] += mark;
              ++z;
              break;
          }
          if (i == name_array.length)
          {
              break;
          }
      }
      for (int y = 0; y < name_array.length; ++y)
      {
          System.out.println(name_array[y] + ' ' + mark_array[y]);
      }
  }
}

代码在输入的字符串之前输出null。 如果我输入Harry Houdini作为名字,将打印nullHarry Houdini。

我该如何避免这种情况?

2 个答案:

答案 0 :(得分:4)

您要将值附加到String[]元素的默认值。

String的默认值为null,您的数组初始化为默认值:String name_array[] = new String[4];

因此,您将null[the name]作为值。

以下是一个独立的示例:

String[] foo = new String[1];
foo[0] += "bar";
System.out.println(foo[0]);

<强>输出

nullbar

另外值得注意的是,String的{​​{1}}字面值为null,例如"null"将逐字打印System.out.println((String)null);

您可能想尝试分配值而不是附加值:null

答案 1 :(得分:1)

在开头将name_array[0] += name;更改为name_array[0] = name;