繁体   English   中英

Java - 如何通过 main 方法在不同的类中存储变量?

[英]Java - How to store a variable via main method in a different class?

我应该将基于用户输入的对象变量存储在主方法中,到不同的类。 我得到了“gerbil.id”和“gerbil.name”的静态到非静态参考错误; 我什至不知道它是否会保存到沙鼠类中对象的变量中。 有任何想法吗? 这是我到目前为止所拥有的:

编辑:现在,当我运行发布的修复程序时,我得到了一个 nullpointerexceptor; 这是更新的代码。 异常指向 gerbilArray[i].id = keyboard.next() 行。 我不确定是什么原因造成的。 我已经将 id 列为一个字符串,并在运行时输入一个字符串(一个单词)。

在我的信息类里面:

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    System.out.println("How many gerbils in the lab?");
    int numberOfGerbils = keyboard.nextInt();
    Gerbil[] gerbilArray = new Gerbil[numberOfGerbils];

    for(int i = 0; i < numberOfGerbils; i++){

        System.out.print("Lab ID:");
        gerbilArray[i].id = keyboard.next();

}

沙鼠类的内部:

import java.util.Scanner;
public class Gerbil {

public String id;


public Gerbil(String name) {
    this.id = "";
  }
}
public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    System.out.println("How many gerbils in the lab?");
    int numberOfGerbils = keyboard.nextInt();
    Gerbil[] GerbilArray = new Gerbil[numberOfGerbils]; // initialization of array

    for(int i = 0; i < numberOfGerbils; i++){
        GerbilArray[i] = new Gerbil();
        System.out.print("Lab ID:");
        // String Gerbil.id = keyboard.next(); should be replaced by
        GerbilArray[i].id=keyboard.next(); // because you should call non static members using objects of a class. Here object is an array element which requires an array index.

        System.out.print("Gerbil Nickname:");
        //String name = keyboard.next(); replace by
        GerbilArray[i].name=keyboard.next();
        // as stated earlier. and you don't need to write String again because you have already declared it in the class declaration. If you try to do this way, you are creating a new String object only. This name has already been assigned to array, so it will result in an error.
    }
}

在 Gerbil 类中,构造函数应更正为

public Gerbil(String name, String id) {
    this.name = name;
    this.id = id;
}

因为本地成员隐藏了班级成员。 这里构造函数的nameid将隐藏类的名称和 id。 上面的语句没有任何作用。 它只是对自己进行的一项分配。 this关键字用于指向调用对象。

并且由于您提供了一个参数化构造函数,但是您正在使用默认构造函数创建对象,因此您还需要明确地创建一个默认构造函数。

Gerbil(){}

它应该是

GerbilArray[i].id = keyboard.next();

代替

Gerbil.id = keyboard.next();

如果您遵循以小写字母开头的变量名约定,这将有助于避免这种混淆。 那么它将是:

gerbilArray[i].id = keyboard.next();

您收到 NullPointerException,因为在为数组分配空间时出现问题。 例如: numberofGerbils=5 然后gerbilArray[0],gerbilArray[1],gerbilArray[2],gerbilArray[3],gerbilArray[4] 被创建

但是当您尝试访问 gerbilArray[5] 时,它显示 NullPointerException。 您已经使用了"i<=numberofGerbils" 不应该是 "<=" 它应该只是“<” 这样问题就解决了。当你用“=”的时候,调用的是数组索引5,实际上是不存在的!!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM