所以,我是编程的新手,我有这个练习,我必须阅读一个int[][]
数组,其中包含年龄和试图加入俱乐部会员资格的差点,有两个类别,高级和开放。
我的工作是读取example [[45, 12],[55,21],[19, -2]]
的数组,其中第一个int是年龄,第二个是障碍级别。如果年龄至少为55
且差点水平高于7
,则该人获得高级会员资格,否则他将获得开放式会员资格。我的想法是将int[][]
看作矩阵并添加两个数字(年龄和级别),如果数字高于62,我会将其归类为高级,否则为开放。
我的方法如下:
public class montecarlo {
static String[] openOrSenior(int[][] a) {
int i, j, sum;
String[] abo = new String[a[0].length];
for (i = 0; i < a.length; i++)
for (j = 0; j < a[0].length; j++ ) {
sum = 0;
int x = a[i][j];
sum = sum + x;
if (sum > 62)
abo[i] = "Senior";
else
abo[i] = "Open"; //this would be line 12
}
return abo;
}
public static void main(String[] args) {
int [][] a = {{42, 12},{55, 21},{19,-2}};
String[] x = openOrSenior(a); //this would be line 20
Out.print(x); //here was to see what i'd get if i let it run
}
}
这是我得到的错误:
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:2 在montecarlo.openOrSenior(montecarlo.java:12)at montecarlo.main(montecarlo.java:20)
我真的很感激一些帮助。
答案 0 :(得分:2)
这是一个更简单的版本,修复了语法错误。
public class montecarlo {
static String[] openOrSenior(int[][] a) {
String[] abo = new String[a.length]; // you had a[0] here instead of a
for (int i = 0; i < a.length; i++) {
if (a[i][0] >= 55 && a[i][1] > 7) {
abo[i] = "Senior";
} else {
abo[i] = "Open";
}
}
return abo;
}
}
答案 1 :(得分:0)
这解决了所有数组边界问题,但正如其他人所提到的,不是语义中的缺陷。完全重写这个答案是没有意义的,所以我保持原样。
我发现代码中存在两个可能导致异常的主要问题。
在第12行,您的问题是,您定义的数组大小错误。
String[] abo = new String[a.length];
但还有一个问题,因为第二个周期的长度不正确,你需要:
for (j = 0; j < a[i].length; j++ )
好的,这个问题永远不应该发生,因为你的所有数组都有相同的长度。但是,如果只有{31}
和残疾人一起出现障碍,那么它会在周期中崩溃。
对于下一个练习 - 创建一个包含两个int
变量age
和handicap
的新类。这就是你用Java做的。一系列整数对于什么是年龄和什么是障碍没有区别。
答案 2 :(得分:0)
import java.util. * ;
import java.lang. * ;
import java.io. * ;
class montecarlo {
static String[] openOrSenior(int[][] a) {
int i,
j,
sum,
x;
/*Declare x here, otherwise in your code it will create a new variable everytime in your for loop*/
String[] abo = new String[a.length];
/* a.length not a[0].length */
for (i = 0; i < a.length; i++) {
sum = 0;
/* sum should initialised to zero here every time outside the inner for loop*/
for (j = 0; j < a[0].length; j++) {
x = a[i][j];
sum = sum + x;
}
/* check outside for loop whether the total sum is greater than 62 */
if (sum > 62) {
abo[i] = "Senior";
}
else {
abo[i] = "Open";
}
}
return abo;
}
public static void main(String[] args) {
int[][] a = {
{
42,
12
},
{
55,
21
},
{
19,
-2
},
{
72,
74
}
};
String[] x = openOrSenior(a);
System.out.print(x);
}
}
以下是您想要的工作演示。 我在评论中指出了你的错误。 你犯了几个错误,请仔细观察代码并理解你做错了什么。
你的逻辑中还有一个缺陷,你应该自己解决。 例如年龄= 60,差点等级= 3 总数= 60 + 3 = 63,大于62,因此应该是&#34;高级&#34;根据你的逻辑,但由于差点水平低于7,这是错误的。
答案 3 :(得分:-1)
尝试类似
的内容public class montecarlo {
public static void main(String[] args) {
int [][] a = {{42, 12},{55, 21},{19,-2}};
String[] x = openOrSenior(a); //this would be line 20
System.out.println(Arrays.asList(x)); //here was to see what i'd get if i let it run
}
static String[] openOrSenior(int[][] a) {
int i, j, sum;
String[] abo = new String[a.length];
System.out.println(abo.length);
for (i = 0; i < a.length; i++)
for (j = 0; j < a[0].length; j++) {
sum = 0;
int x = a[i][j];
sum = sum + x;
if (sum > 62)
abo[i] = "Senior";
else abo[i] = "Open";
} //this would be line 12
return abo;
}
}