一开始,我正在启动20
大小数组字段以获取输入(即std_id
,name
,...等)。
我想为这些字段创建一个动态数组,而不是在开始时初始化长度。
应根据用户输入的输入为动态数组分配其长度。
请在下面的代码中提供帮助。
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]));
}
}
}
答案 0 :(得分: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
。
答案 1 :(得分: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.
答案 2 :(得分: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));
}
}
}
答案 3 :(得分: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()));
}
}
评论: