如何根据输入在java中创建动态数组?

问题描述 投票:-3回答:4

一开始,我正在启动20大小数组字段以获取输入(即std_idname,...等)。我想为这些字段创建一个动态数组,而不是在开始时初始化长度。应根据用户输入的输入为动态数组分配其长度。请帮助以下代码。

public class Input {
    private int[] std_id = new int[20];// initiating 20 size 
    private String[] name = new String[20];
    private int[] age = new int[20];
    private String[] email = new String[20];;

    Scanner in = new Scanner(System.in);

    private final List<Student> Students = new ArrayList<Student>();

    public Input()
    {
        initInput();
    }

    public void initInput()
    {
         int rec;
         System.out.println("How  many records do u want to enter:");
         rec = in.nextInt();



        for(int i=0 ; i <= rec; i++)
        {
            std_id[i] = in.nextInt();
            name[i] = in.next();
            age[i] = in.nextInt();
            email[i] = in.next();
        }

        for(int i=0; i <= rec ; i++)
        {
            Students.add(new Student(std_id[i],name[i], age[i], email[i]));
        }
    }   
}
java arrays multidimensional-array
4个回答
0
投票

从用户那里读取rec的值后立即使用以下行:

std_id = new int[rec];
name = new String[rec];
age = new int[rec];
email = new String[rec];

以下是完全更正的代码:

public class Input {
    private int[] std_id;// initiating 20 size 
    private String[] name;
    private int[] age;
    private String[] email;

    Scanner in = new Scanner(System.in);

    private final List<Student> Students = new ArrayList<Student>();

    public Input()
    {
        initInput();
    }

    public void initInput()
    {
         int rec;
         System.out.println("How  many records do u want to enter:");
         rec = in.nextInt();

        std_id = new int[rec];
        name = new String[rec];
        age = new int[rec];
        email = new String[rec];

        for(int i=0 ; i < rec; i++)
        {
            std_id[i] = in.nextInt();
            name[i] = in.next();
            age[i] = in.nextInt();
            email[i] = in.next();
        }

        for(int i=0; i < rec ; i++)
        {
            Students.add(new Student(std_id[i],name[i], age[i], email[i]));
        }
    }   
}

注意:使用循环时,不要使用i <= rec,因为你使用了错误的索引,你会得到ArrayIndexOutOfBoundsException。请改用i < rec


0
投票

在知道rec的值后初始化数组:

int rec;
System.out.println("How  many records do u want to enter:");
rec = in.nextInt();

std_id = new int[rec];
age = new int[rec];
etc.

并从顶部的类变量中删除初始化:

public class Input {    
    private int[] std_id;
    private String[] name;
    etc.

0
投票

摆脱阵列。你不需要它们。

另外,如果你想要rec的记录数,不要从0循环到<= rec,因为这将是rec + 1记录,所以我改变循环使用< rec,这是常用的方法。

Java命名约定是字段名称以小写字母开头,因此我将Students重命名为students

public class Input {
    Scanner in = new Scanner(System.in);

    private final List<Student> students = new ArrayList<Student>();

    public Input()
    {
        initInput();
    }

    public void initInput()
    {
        System.out.println("How  many records do u want to enter:");
        int rec = in.nextInt();

        for (int i = 0; i < rec; i++)
        {
            int std_id = in.nextInt();
            String name = in.next();
            int age = in.nextInt();
            String email = in.next();
            students.add(new Student(std_id, name, age, email));
        }
    }   
}

0
投票

还有一个解决方案

class Input {
    private Scanner in = new Scanner(System.in);
    private List<Student> list = new ArrayList<>();

    public Input() {
        initInput();
    }

    public void initInput() {
        int rec;
        System.out.println("How  many records do u want to enter:");
        rec = in.nextInt();

        for (int i = 0; i < rec; i++) {
            Student student = new Student();
            student.setId(in.nextInt());
            student.setName(in.next());
            student.setAge(in.nextInt());
            student.setEmail(in.next());
            list.add(student);
        }
        // this line to stop entering data
        in.close();
        // this one just to show the result
        list.forEach(s -> System.out.println("Student ID " + s.getId() + ", name: " + s.getName()));
    }
}

评论:

  • 不需要使用数组,取代List!
  • 在for循环中,您需要使用'<'not'<='来防止额外的迭代
  • 使用一个for循环完成所有操作就足够了
© www.soinside.com 2019 - 2024. All rights reserved.