与数组有关的错误循环

时间:2013-10-27 21:32:48

标签: java

package masivi;

import java.util.Scanner;
public class Masivi {
    public static void main (String args[]){
    int atzimes[][]={{50,60,55,67,73},
                     {62,65,71,70,81},
                     {72,66,77,80,69}};

    int a = 0;
    int b = 0;
   int Y = 0;
       int D = 0;    
     Scanner scan = new Scanner(System.in);
     System.out.println("Ievadiet skaitli kuru velaties parbaudit:");
     int x = scan.nextInt();

     while (Y<16){
     if (atzimes[a][b] == x) System.out.println("Skaitlis "+x+" atrodas saja masiva.");
     Y=Y+1;
     if (atzimes[a][b] == x) break;
     b=b+1;
     if (b==4) a=a+1;
     if (b==4) b=0;
      if (a==2) ;

}
  if (atzimes[a][b] == x) System.out.println("" );
  else System.out.println("Skaitlis "+x+" neatrodas masiva." );

    }
}

当我检查最后一个值(69)时,它超出界限,我不知道为什么。我已经尝试更改循环结束的值,但它没有帮助我目前没有想法。它要求x的值并检查是否在数组中。

3 个答案:

答案 0 :(得分:1)

尝试使用嵌套for循环重做循环。嵌套for循环看起来更整洁,允许您处理代码。你也不会有太多的错误。

for(int i=0; i<6;i++){  
  for(int j=0; j<4; j++){   
      atzimes[i][j];  //do stuff here
  }
}

答案 1 :(得分:0)

当您到达arrat界限时,您忘记重置a的方式与b相同。

更改

  if (a==2) ;

  if (a==2) a=0;

答案 2 :(得分:0)

Java数组从索引零开始。 atzimes的维度为[3] [5],因此数组的最后一个元素(69)位于索引[2] [4]。除此之外的任何事情都是超出范围的。您的代码可以增加超过2,因此可能导致ArrayIndexOutOfBoundsException。

此外,您可能希望使用更好的程序结构。调试这样的程序非常复杂。使用嵌套for或while循环而不是while (Y<16) - 它将使调试更容易。