Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储多个字符串时的Java NullPointerException_Java - Fatal编程技术网

存储多个字符串时的Java NullPointerException

存储多个字符串时的Java NullPointerException,java,Java,我正在写一个程序,我迫切需要一些帮助 我有一个类需要同时跟踪多个对象 我试着这样做: public class tracker { private String[] Name; private int NameCounter; public void getName(String name) { Name[NameCounter] = name; NameCounter = NameCounter + 1; } public static

我正在写一个程序,我迫切需要一些帮助

我有一个类需要同时跟踪多个对象

我试着这样做:

public class tracker {
   private String[] Name;
   private int NameCounter;

   public void getName(String name) {
      Name[NameCounter] = name;
      NameCounter = NameCounter + 1;
   }
   public static void main(String[] args) {
      getName("Name1");
      getName("Name2");

      System.out.println(Name[1] + " " + Name[2])
   }
}

我得到一个错误,说我有一个NullPointerException。我该怎么办?

Name
为空,因为您没有实例化数组

你能行

private String[] Name = new String[2];
但由于数组具有固定长度,如果您认为可能需要更多名称,我建议在此处使用ArrayList:

public class tracker {
   private ArrayList<String> names = new ArrayList<String>(); // please follow naming conventions

   public void addName(String name) { // getName is a baaad name for a method that changes a variable
      names.add(name);
   }
   public static void main(String[] args) { // main, not mian
      addName("Name1");
      addName("Name2");
      System.out.println(names.get(0) + " " + names.get(1)) // the second one is at index 1, not 0
   }
}
公共类跟踪器{
private ArrayList names=new ArrayList();//请遵循命名约定
public void addName(String name){//getName是用于更改变量的方法的baaad名称
名称。添加(名称);
}
公共静态void main(字符串[]args){//main,而不是main
地址名称(“名称1”);
地址名称(“名称2”);
System.out.println(names.get(0)+“”+names.get(1))//第二个位于索引1,而不是0
}
}

名称
为空,因为您没有实例化数组

你能行

private String[] Name = new String[2];
但由于数组具有固定长度,如果您认为可能需要更多名称,我建议在此处使用ArrayList:

public class tracker {
   private ArrayList<String> names = new ArrayList<String>(); // please follow naming conventions

   public void addName(String name) { // getName is a baaad name for a method that changes a variable
      names.add(name);
   }
   public static void main(String[] args) { // main, not mian
      addName("Name1");
      addName("Name2");
      System.out.println(names.get(0) + " " + names.get(1)) // the second one is at index 1, not 0
   }
}
公共类跟踪器{
private ArrayList names=new ArrayList();//请遵循命名约定
public void addName(String name){//getName是用于更改变量的方法的baaad名称
名称。添加(名称);
}
公共静态void main(字符串[]args){//main,而不是main
地址名称(“名称1”);
地址名称(“名称2”);
System.out.println(names.get(0)+“”+names.get(1))//第二个位于索引1,而不是0
}
}
这应该执行

public class tracker {
    private String[] Name = new String[2];
    private int NameCounter;

    public void getName(String name) {
        Name[NameCounter] = name;
        NameCounter = NameCounter + 1;
    }

    public static void main(String[] args) {
        tracker t = new tracker();
        t.getName("Name1");
        t.getName("Name2");

        System.out.println(t.Name[0] + " " + t.Name[1]);
    }
}
这应该执行

public class tracker {
    private String[] Name = new String[2];
    private int NameCounter;

    public void getName(String name) {
        Name[NameCounter] = name;
        NameCounter = NameCounter + 1;
    }

    public static void main(String[] args) {
        tracker t = new tracker();
        t.getName("Name1");
        t.getName("Name2");

        System.out.println(t.Name[0] + " " + t.Name[1]);
    }
}

虽然这与你的问题无关,但我还是把它贴出来了。
按照Java标准,方法getName应该命名为setName,这样方法的名称就可以传达正确的目的。

虽然它与您的问题无关,但我还是发布了它。
按照Java标准,方法getName应该命名为setName,这样方法的名称就可以传达正确的目的。

嘿,正如其他人在回答中所建议的那样,您必须实例化
name
变量,但这需要您事先知道数组的大小。如果您手边不知道大小,那么可以尝试使用类似于
ArrayList
的集合。命名约定…类名,第一个字母应该大写。正如其他人在回答中建议的那样,您必须实例化
name
变量,但这需要您事先知道数组大小。如果您事先不知道大小,那么可以尝试使用类似于
ArrayList
的集合。命名约定…类名,第一个字母应大写。若要添加,请遵循Java命名约定。变量名称应以小写字母开头。这是相关的。:)+事实上,我更喜欢在这里将它命名为
addName
(参见我的答案)。要添加,请遵循Java命名约定。变量名称应以小写字母开头。这是相关的。:)+事实上,我更喜欢在这里把它命名为
addName
(见我的答案)。