Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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 使用扫描仪创建ArrayList_Java_Arraylist_Java.util.scanner - Fatal编程技术网

Java 使用扫描仪创建ArrayList

Java 使用扫描仪创建ArrayList,java,arraylist,java.util.scanner,Java,Arraylist,Java.util.scanner,我正在做一个项目,使用数组列表创建学生列表。我知道如何创建一个简单的数组列表,但是,我决定使用Scanner方法。不幸的是,这就是我的麻烦开始的地方。下面是我的原始类的外观: import java.util.Scanner; /** * Used to create a single student. */ public class Student { private String Name; private int Age; private String Gender; privat

我正在做一个项目,使用数组列表创建学生列表。我知道如何创建一个简单的数组列表,但是,我决定使用Scanner方法。不幸的是,这就是我的麻烦开始的地方。下面是我的原始类的外观:

import java.util.Scanner;

/**
 * Used to create a single student.
 */

public class Student
{
private String Name;
private int Age;
private String Gender;
private int heightInches; //inches%maxInches
private int heightFeet; //inches/maxInches
private int Inches;
private final int maxInches = 12;
private int Weight;
private String Position;
private Scanner keybd;

/**
 * Constructor
 */
public Student(){
    keybd = new Scanner(System.in);
    setStudent();
}

/**
 * Method to create a student
 */
public void setStudent(){
    System.out.println("Enter name of student:");
    Name = keybd.next();
    System.out.println("Enter age of student:");
    Age = keybd.nextInt();
    System.out.println("Enter gender of student:");
    Gender = keybd.next();
    System.out.println("Enter height in inches of student:");
    Inches = keybd.nextInt();
    if(Inches>= maxInches){
        heightFeet = Inches/maxInches;
        heightInches = Inches%maxInches;
    }
    else{
        heightInches = Inches%maxInches;}
    System.out.println("Enter position of user:");
    Position = keybd.next();
    System.out.println("Enter weight of student:");
    Weight = keybd.nextInt();
}

/**
 * Returns height of student
 */
public void getHeight(){
    System.out.println(heightFeet + "'" + heightInches + "''");
}

/**
 * Prints details of student
 */
public void printDetails(){
    if((Position.equals("Doctor")) || (Position.equals("Coach"))){
        System.out.println(Name + " who is a " + Age + " year old " + Gender + " weighs " + Weight + " and is ");
        getHeight();}
    else{System.out.println(Name + " who is a " + Age + " year old " + Gender + " is ");
        getHeight();
    }
}
}


不幸的是,当我尝试在我的新类中调用setStudent方法时,我遇到了一些问题。我的新类将调用Students类以实际制作一个列表。我真的很想有一个“如果”语句和一个扫描器,如果用户希望添加另一个学生,它将循环,否则它将结束,但是,因为我甚至不能使用上述代码创建一个新学生,所以我甚至不值得花时间尝试这个操作。

每个学生对象都是它自己的学生类实例。当您读取构造函数中的所有数据时,您将使用特定的Student对象。您可以在构造函数中创建一个循环,创建新的Student对象,但这会相当混乱——毕竟,构造函数的工作是创建一个对象

(除此之外,让构造函数请求用户输入是一种糟糕的风格。这会使类在单元测试中不稳定,并将其绑定到控制台,使其在GUI程序中不可用。最好在别处读取所有学生数据,然后将其传递给学生构造函数。)


因此,学生类之外的一些代码(例如,你的main方法)应该有学生列表,收集输入,并创建学生对象。

我决定尝试保持简单(很久以来我第一次选择了简单的方法) 在我的新课上,我写了这样一句话:

/**
 * Method to add more students
 */
public void addStudent(){
    studentList.add  (new Student());
}

好的一面是,现在我可以尝试使用if-else方法来添加更多学生。

您遇到了什么问题?我认为setStudent函数的任务是设置一个学生而不是学生的信息。你为什么不把你想要的逻辑转移到别的地方?@Eran-什么都没有happens@KickButtowski-我指的是学生而不是学生你有主要的方法吗?它在做什么?setStudent方法将成为另一种方法的一部分,将学生添加到列表中(除了预定义的学生)@TisMe对我来说,你试图让你的生活变得复杂,这就是all@KickButtowski不幸的是,我就是这样滚的(可悲的是,我想得太多了)@TisMe只要你不走神就行了。读答案,试着跟着说你会没事的。罗伯特:答案太棒了