如何将多个数据(数组)存储到 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];
并且由于 nextInt
和 nextLine
的混合使用,看起来您的 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()));
供您参考,subjectFee
是 primitive 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()));
}
}
我正在尝试使用 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];
并且由于 nextInt
和 nextLine
的混合使用,看起来您的 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()));
供您参考,subjectFee
是 primitive 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()));
}
}