0
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 的值并检查是否在数组中。

4

3 回答 3

1

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

for(int i=0; i<6;i++){  
  for(int j=0; j<4; j++){   
      atzimes[i][j];  //do stuff here
  }
}
于 2013-10-27T21:40:31.960 回答
0

当您到达 Arrat 边界的尽头时,您忘记了以a相同的方式进行重置。b

改变

  if (a==2) ;

  if (a==2) a=0;
于 2013-10-27T21:38:51.957 回答
0

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

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

于 2013-10-27T21:41:51.803 回答