循环和数组没有跟进

时间:2013-10-08 23:28:42

标签: java arrays loops

int [] f = {1,2,3,4,5,5,4,3,2,1};
int [] b = {6,1};
System.out.println(Arrays.toString(hide(f,b)));

public static int [] hide(int [] front, int [] back) {
    int temp;
    int extraTemp;
    int nextTemp = 0;

    int [] hiddenAt = new int[front.length];
    //int [] shownAt = new int[front.length];

    for(int x = 0; x < front.length; x++){
        for(int y = 0; y <= back.length; y++){
            temp = x;
            if ((back.length > front.length) || (front[x] < 0 || back[y] < 0) || (front.length < 1 || back.length < 1)) {
                System.exit(0);
            }

            if (y < back.length - 1){
            nextTemp = Math.abs(back[y + 1] - front[x + 1]);
            }
            else {
                nextTemp = 0;
            }

            if (front[x] > back[y]) {
                System.out.println(temp);
            }
            else if (front[x] < back[y] && y >= back.length - 1 ) {
                extraTemp = back[y] - front[x];

                if (extraTemp > nextTemp){
                    extraTemp = nextTemp;
                }
                System.out.println(extraTemp);
            }
            else if (front[x] < back[y]) {
                extraTemp = back[y] - front[x];

                if (extraTemp > nextTemp){
                    extraTemp = nextTemp;
                }
                System.out.println(extraTemp);
            }
        }
    }
    return hiddenAt;
}

正在替换println以查看正在生成的值。当我发现值是正确的时,它们将是hiddenAt[z] = temp;

我需要将front[0]back[0]进行比较,然后将front[1]back[1]进行比较等。之后,它会转换为front[1] { {1}}然后back[1] front[2]直到back[2]结束。我想找出最低差异的地方。 (在这种情况下,当[]的数字是4和5时。)

我得到两个错误,一个说第39行         if((back.length&gt; front.length)||(front [x]&lt; 0 || back [y]&lt; 0)||(front.length&lt; 1 || back.length&lt; 1) ){                     System.exit(0);                 }

错了,第9行也错了。     公共课2 {     public static void main(String [] args){

front[]

确切的错误是:

    int [] f = {1,2,3,4,5,5,4,3,2,1};
    int [] b = {6,1};
    System.out.println(Arrays.toString(hide(f,b)));
}

2 个答案:

答案 0 :(得分:0)

您的问题是数组索引超出范围,因此您尝试访问不存在的元素。

在线     if((back.length&gt; front.length)||(front [x]&lt; 0 || back [y]&lt; 0)||(front.length&lt; 1 || back.length&lt; 1) ){ 你说back[y] < 0你的for语句转到<= back.length

for(int y = 0; y <= back.length; y++){

所以返回的长度为2(有2个元素)但是你将在第三个循环中执行此循环三次0,1,2没有back[2]作为back[0] = 6和{{ 1}}。

所以将back[1] = 1更改为for(int y = 0; y <= back.length; y++){将解决此特定错误

请记住,长度从1开始(如果有元素)索引从0开始。

答案 1 :(得分:0)

这是您的第二阵列问题:

        if (y < back.length - 1){
        nextTemp = Math.abs(back[y + 1] - front[x + 1]);
        }
        else {
            nextTemp = 0;
        }

当您检查y < back.length - 1 时,x执行相同操作。

因此,您需要if (y < back.lenth-1 && x < front.length-1),假设您确实想要引用front[x+1]