提问人:BekarBanda 提问时间:3/10/2023 最后编辑:Mark RotteveelBekarBanda 更新时间:3/10/2023 访问量:261
收到错误:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException:索引 0 超出长度 0 [duplicate] 的边界
Getting error : Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 [duplicate]
问:
我正在尝试从另一个类(即来自“StudentMarks.class”)获取名称输入。我从主类(即来自“StudentMarks.class”)获取所有用户输入,但声明是在另一个类(即 value.class)中完成的。
虽然我已经初始化了变量大小,这将是我的字符串数组的大小,但在输入用户名时,它输入了错误
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at studentmarks.StudentMarks.main(StudentMarks.java:53)
System.out.printf("\nEnter names : ");
for(int i=0; i<(mar.size); i++){
mar.name[i]= sc.nextLine(); // Getting error here
}
我知道这段代码很混乱,因为我正处于学习阶段,我想尝试所有可能的方式来获取输入、生成输出等。通常,我正在试验我的代码。
我的代码在这里
package studentmarks;
import java.util.*;
class value{
int size; // variable to declare size of my array
String name[]=new String[size]; //take name input from user
float marks[]= new float[size]; //take marks input from user
float sum=0;
double total(){
for(float i: marks)
sum+=i;
return sum;
}
double average(){
return sum/(marks.length);
}
char grade(){
if(average()>=90)
return 'A';
else if(average()>=80 && average()<90)
return 'B';
else
return 'C';
}
}
public class StudentMarks {
public static void main(String[] args) {
// TODO code application logic here
Scanner sc=new Scanner(System.in);
value mar=new value();
System.out.printf("Enter size : ");
mar.size= sc.nextInt(); // taking user input to define array size declared in value.class
System.out.println(mar.size); // checking size was correctly intitalized or not
System.out.printf("\nEnter names : ");//taking name input here (array was declared in value.class)
for(int i=0; i<(mar.size); i++){
mar.name[i]= sc.nextLine(); //Getting array index error here
}
System.out.printf("\nEnter marks : ");//taking marks input here (array was declared in value.class)
for(int i=0; i<mar.size; i++){
mar.marks[i]= sc.nextFloat();
}
//printing result
for(String i: mar.name){
System.out.println(i);
}
System.out.println(mar.average());
System.out.println(mar.grade());
}
}
答:
3赞
Elliott Frisch
3/10/2023
#1
类1 的初始化发生一次。而在那个时候,是.value
size
0
int size;
String name[]=new String[size];
float marks[]= new float[size];
这就是为什么你通常会把 放到构造函数中。如果不这样做,你可以做到size
value mar=new value();
System.out.printf("Enter size : ");
mar.size= sc.nextInt();
mar.marks = new float[mar.size];
mar.name = new String[mar.size];
或者,使用构造函数
int size;
String[] name;
float[] marks;
public value(int size) {
this.size = size;
this.name = new String[size];
this.marks = new float[size];
}
然后
System.out.print("Enter size : ");
int size = sc.nextInt();
value mar = new value(size);
1 根据 Java 命名惯例,类名以大写字母开头。 应该是(或类似)。value
MyValue
评论
value
value mar=new value();
value
name
mar.size
mar.name