多个int [] []数组到单个[] java

时间:2017-11-13 13:40:23

标签: java arrays

所以,我是编程的新手,我有这个练习,我必须阅读一个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)

我真的很感激一些帮助。

4 个答案:

答案 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变量agehandicap的新类。这就是你用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;
    }
}