如何将多个数据(数组)存储到 Scanner 的方法中?

How to store multiple data (array) to a method from Scanner?

我正在尝试使用 Scanner 从用户获取主题详细信息的多个数据。例如:用户输入数字 3 然后用户必须输入主题名称、主题代码和主题费用 3 次,我希望将详细信息存储在一个数组中,最后显示。

编辑: 感谢@Ksap,代码运行良好,但小问题是不显示输入的第一个值(null),仅显示最后一个输入。 屏幕截图:

到目前为止这是主题 class:

public class Subject {
public String[] subjectName;
public String[] subjectCode;
public Double[] subjectFee;

  //default constructor 
  Subject(){            
    }

 Subject(String[] subjectCode, String[] subjectName, Double[] subjectFee){
     this.subjectCode = subjectCode; 
     this.subjectName = subjectName;
     this.subjectFee = subjectFee;
   }
    //**********************************Setter Methods******************************\
public void setSubjectCode(String[] subjectCode){
     this.subjectCode=subjectCode;
}
public void setSubjectName(String[] subjectName){
     this.subjectName=subjectName;
}
public void setSubjectFee(Double[] subjectFee){ 
     this.subjectFee=subjectFee;
}
//**********************************Getter Methods******************************\

public String[] getSubjectCode(){ 
       return subjectCode;
}
public String[] getSubjectName(){
       return subjectName;
}
public double[] getSubjectFee(){ 
       return subjectFee;
}
}

和 SubjectDriver:

public class SubjectDriver {
public static void main(String[] args) {
    int subjectAmount;
    Subject a = new Subject();
    Scanner input = new Scanner(System.in);
    System.out
        .println("Please input the amount of subjects are you resposible  for ?( Maximum 4)");
    subjectAmount = Integer.parseInt(input.nextLine());

    a.subjectName = new String[subjectAmount];
    a.subjectCode = new String[subjectAmount];
    a.subjectFee = new Double[subjectAmount];

    for (int index = 0; index < subjectAmount; index++) {
        System.out.println("enter subject name: ");
        a.subjectName[index] = input.nextLine();;

        System.out.println("enter subject code: ");
        a.subjectCode[index] = input.nextLine();

        System.out.println("enter subject fee: ");
        a.subjectFee[index] = Double.parseDouble(input.nextLine());
    }

    System.out.println("Subject name: " + Arrays.asList(a.getSubjectName())
        + "\nSubject Code: " + Arrays.asList(a.getSubjectCode()) + "\nSubject fee: "
        + Arrays.asList(a.getSubjectFee()));
}

}

你的帮助将非常宝贵

我假设你得到了 Nullpointerexception 因为数组未初始化,为了解决这个问题,将这些行添加到 for loop

a.subjectName = new String[subjectAmount];
a.subjectCode = new String[subjectAmount];
a.subjectFee = new double[subjectAmount];

并且由于 nextIntnextLine 的混合使用,看起来您的 Scanner 也无法按预期工作,以解决此问题

用这个 subjectAmount = Integer.parseInt(input.nextLine()) 替换 subjectAmount=input.nextInt();a.subjectFee[index]=input.nextDouble() 通过这个 a.subjectFee[index] = Double.parseDouble(input.nextLine());

编辑: 当打印 array 时,它会打印 array 的引用,如果我们想查看数组的内容,将其转换为 List 并像这样打印 Arrays.asList(a.getSubjectName()) 所以 print 语句看起来像这样

System.out.println("Subject name: " + Arrays.asList(a.getSubjectName())
            + "\nSubject Code: " + Arrays.asList(a.getSubjectCode()) + "\nSubject fee: "
            + Arrays.asList(a.getSubjectFee()));

供您参考,subjectFeeprimitive double 数组,因此它仍将打印引用,要查看值,请将其声明为 Double 数组。

public class SubjectDriver {
    public static void main(String[] args) {
        int subjectAmount;
        Subject a = new Subject();
        Scanner input = new Scanner(System.in);
        System.out
            .println("Please input the amount of subjects are you resposible  for ?( Maximum 4)");
        subjectAmount = Integer.parseInt(input.nextLine());

        a.subjectName = new String[subjectAmount];
        a.subjectCode = new String[subjectAmount];
        a.subjectFee = new Double[subjectAmount];

        for (int index = 0; index < subjectAmount; index++) {
            System.out.println("enter subject name: ");
            a.subjectName[index] = input.nextLine();;

            System.out.println("enter subject code: ");
            a.subjectCode[index] = input.nextLine();

            System.out.println("enter subject fee: ");
            a.subjectFee[index] = Double.parseDouble(input.nextLine());
        }

        System.out.println("Subject name: " + Arrays.asList(a.getSubjectName())
            + "\nSubject Code: " + Arrays.asList(a.getSubjectCode()) + "\nSubject fee: "
            + Arrays.asList(a.getSubjectFee()));
    }
}