循环的Java 2D数组未读取最后一个值

循环的Java 2D数组未读取最后一个值,java,multidimensional-array,Java,Multidimensional Array,我正在做一个学校作业,我对2d数组有一个问题。基本上,我的程序从用户处获取一个整数,并确定其中一个数组值是否低于该整数。我设置了一个while和for循环来实现这个技巧,但是我似乎无法让我的循环使用最后一行数据。我已经试着把东西混在一起好几个小时了 我敢肯定,无论我错过了什么,我都做得很糟糕,但我现在需要一只手。 这是我的代码的相关数据 //array of store inventory int invArray[][] = {{102, 54, 20, 78},

我正在做一个学校作业,我对2d数组有一个问题。基本上,我的程序从用户处获取一个整数,并确定其中一个数组值是否低于该整数。我设置了一个while和for循环来实现这个技巧,但是我似乎无法让我的循环使用最后一行数据。我已经试着把东西混在一起好几个小时了

我敢肯定,无论我错过了什么,我都做得很糟糕,但我现在需要一只手。 这是我的代码的相关数据

    //array of store inventory
    int invArray[][] = {{102, 54, 20, 78}, 
                        {45, 25, 35, 75},
                        {12, 35, 45, 65},
                        {54, 25, 34, 45},
                        {15, 35, 50, 25}};
    int menuChoice = 0;                     //allows user to select a menu option
    int storeNum=0;                         //store number
    String itemName="null";                 //name for an item
    int itemAmount=0;                       //items below this amount are pulled up in choice 4
    int arrayRow=0;                         //row value for invArray based on itemName
    int arrayCol=0;                         //column value for invArray based on storeNum


       //menu 4
        if (menuChoice == 4){
            System.out.print("Find all items below the number: ");

            //catches mistakes
            try{
            itemAmount = input.nextInt();
            }
            catch(Exception e){
                System.out.print("Invalid value entered. Try again: ");
                itemAmount = input.nextInt();
            }
            System.out.println("Items below "+itemAmount+": ");

            //loop that checks item values at all stores
            arrayRow=0; 
            arrayCol=0;                         //counters for loop
            while (arrayCol < invArray[arrayRow].length){

                for (arrayRow = 0; arrayRow < invArray[arrayCol].length; arrayRow++){


                    if (invArray[arrayRow][arrayCol] < itemAmount){


                        if (arrayRow == 0)
                            itemName = "Tennis Shoes";
                        if (arrayRow == 1)
                            itemName = "Sweaters";
                        if (arrayRow == 2)
                            itemName = "Jeans";
                        if (arrayRow == 3)
                            itemName = "Shorts";
                        if (arrayRow == 4)
                            itemName = "Jackets";


                        //outputs stores with values lower than the one given
                        System.out.println("Store 10"+(arrayCol+1)+" "+itemName+": "
                        +invArray[arrayRow][arrayCol]);

                        for (int i = 0;invArray[4][i] < invArray[arrayRow].length; i++)
                            System.out.println("Store 10"+(i+1)+" "+" jackets : "+invArray[i][4]);
                    }


            }       
                arrayCol++;
                System.out.println();
        }//end item check loop
    }
//商店库存的数组
int invaray[][]={{102,54,20,78},
{45, 25, 35, 75},
{12, 35, 45, 65},
{54, 25, 34, 45},
{15, 35, 50, 25}};
int menuChoice=0//允许用户选择菜单选项
int-storeNum=0//门店号
String itemName=“null”//项目名称
int itemAmount=0//低于此金额的项目将在选项4中提取
int arrayRow=0//基于itemName的invArray的行值
int arrayCol=0//基于storeNum的invArray列值
//菜单4
如果(menuChoice==4){
System.out.print(“查找数字以下的所有项目:”);
//犯错误
试一试{
itemAmount=input.nextInt();
}
捕获(例外e){
System.out.print(“输入的值无效。请重试:”);
itemAmount=input.nextInt();
}
System.out.println(“以下项目+项目金额+”:”;
//检查所有商店的商品值的循环
arrayRow=0;
arrayCol=0;//循环的计数器
while(arrayCol
您确定需要第二行吗

itemName = "Jackets";
arrayCol++;

但是你的代码让我有点困惑,所以我不确定这是否能解决问题。

你确定需要第二行吗

itemName = "Jackets";
arrayCol++;

但是你的代码让我有点困惑,所以我不确定这是否能解决问题。

你的第二个循环搞错了。应该是

for (arrayRow = 0; arrayRow < invArray.length; arrayRow++){
for(arrayRow=0;arrayRow
因为
arrayRow
是第一个索引。在您的代码中,会得到4而不是5,这会导致错误

另外,对于这两个循环,最好使用
for


而且您最好在行循环中包含列循环,因为前者是依赖的,或者您应该交换索引;

您有错误的第二个循环

for (arrayRow = 0; arrayRow < invArray.length; arrayRow++){
for(arrayRow=0;arrayRow
因为
arrayRow
是第一个索引。在您的代码中,会得到4而不是5,这会导致错误

另外,对于这两个循环,最好使用
for

而且您最好在行循环中包含列循环,因为前者是依赖的,或者您应该交换索引;

尝试以下方法:

while (arrayRow < invArray.length) {
    for (arrayCol = 0; arrayCol < invArray[arrayRow].length; arrayCol++) {
        //...
    }
    arrayRow++;
}
while(arrayRow
您的数组有维度
[4][5]
;您正在切换这两个维度,并尝试访问一个元素,就像数组有维度
[5][4]
一样。自
invaray[a]以来,您也只访问了16个元素。对于所有有效的
a
,长度始终为4。

尝试以下操作:

while (arrayRow < invArray.length) {
    for (arrayCol = 0; arrayCol < invArray[arrayRow].length; arrayCol++) {
        //...
    }
    arrayRow++;
}
while(arrayRow

您的数组有维度
[4][5]
;您正在切换这两个维度,并尝试访问一个元素,就像数组有维度
[5][4]
一样。自
invaray[a]以来,您也只访问了16个元素。对于所有有效的
a

替换
while(arrayColby
while(arrayCol
会更有意义。但不确定这是否能解决您的问题。
invArray[whatever]。length
将是列数(=4),而不是行数(=5)。这意味着您将只读取4*4=16个元素,而不会到达最后一行。每当我删除[]两个字段中的任何一个。我得到一个越界error@user1462585仅在for循环中切换变量arrayCol和arrayRow。将
while(arrayCol
替换为
while(arrayCol
会更有意义。但不确定这是否能解决您的问题。
invArray[无论什么].length
将是列数(=4),而不是行数(=5)。