英文:
Problem with "Get Lowest Value" Method in 2 Dimensional Array
问题
我正在编写的一个程序中遇到了一个问题。我需要实现一个 getTotal、Average、highest 和 lowest 方法。问题是,除了最后一个 getLowest 方法之外,其他都正常运行。getLowest 方法给了我一个错误,内容为:"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
at TwoDim.getLowest(TwoDim.java:66)
at TwoDim.main(TwoDim.java:15)"
此外,Eclipse 还显示 "unreachable code",并建议我删除最后的 "return low;" 行。我真的不知道我在这里做错了什么,理应可以正常工作但实际上并没有。任何帮助将不胜感激。
import java.io.*;
class TwoDim
{
//main function
public static void main (String []arg)
{
int [][]list= {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
//Function call and display data returned
System.out.println("Total:" + getTotal(list));
System.out.println("Average:" + getAverage(list));
System.out.println("Row 2 value:" + getRowTotal(list,2));
System.out.println("Column 3 Total :" + getColumnTotal(list,3));
System.out.println("Highest value in row 1 is :" + getHighest(list,1));
System.out.println("Lowest value in row 2 is :" + getLowest(list,2));
//Exit program
System.exit(0);
}
public static int getTotal(int [][]numbers)
{
int tot=0;
for(int row=0;row<numbers.length;row++)
for(int col=0;col<numbers[row].length;col++)
tot+=numbers[row][col];
return tot;
}
public static double getAverage(int [][]numbers)
{
double avg;
avg = (double)(getTotal(numbers) / (12));
return avg;
}
public static int getRowTotal(int [][]numbers, int index)
{
int tot=0;
for(int col=0;col<4;col++)
tot+=numbers[index][col];
return tot;
}
public static int getColumnTotal (int [][]numbers, int index)
{
int tot=0;
for(int row=0;row<numbers.length;row++)
tot+=numbers[row][index];
return tot;
}
public static int getHighest(int [][]numbers,int row)
{
int high = numbers[row][0];
for(int i=1;i<4;i++)
if(numbers[row][i] > high)
high = numbers[row][i];
return high;
}
public static int getLowest(int [][]numbers,int row)
{
int low = numbers[row][0];
for(int i=1;1<4;i++)
if(numbers[row][i] < low)
low = numbers[row][i];
return low;
}
}
英文:
I'm having an issue with this one program I'm writing. I have to do a getTotal, Average, highest and lowest. The thing is, everything is working except the last method, getLowest, which gives me the error "Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
at TwoDim.getLowest(TwoDim.java:66)
at TwoDim.main(TwoDim.java:15)
"
Additionally it says "unreachable code" in Eclipse and tells me to get rid of the "return low;" line at the end. I really don't know what I'm doing wrong here, it should work totally fine but it isn't. Any help would be appreciated.
import java.io.*;
class TwoDim
{
//main function
public static void main (String []arg)
{
int [][]list= {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
//Function call and display data returned
System.out.println("Total:"+getTotal(list));
System.out.println("Average:"+getAverage(list));
System.out.println("Row 2 value:"+getRowTotal(list,2));
System.out.println("Column 3 Total :"+getColumnTotal(list,3));
System.out.println("Highest value in row 1 is :"+getHighest(list,1));
System.out.println("Lowest value in row 2 is :"+getLowest(list,2));
//Exit program
System.exit(0);
}
public static int getTotal(int [][]numbers)
{
int tot=0;
for(int row=0;row<numbers.length;row++)
for(int col=0;col<numbers[row].length;col++)
tot+=numbers[row][col];
return tot;
}
public static double getAverage(int [][]numbers)
{
double avg;
avg= (double)(getTotal(numbers)/(12));
return avg;
}
public static int getRowTotal(int [][]numbers, int index)
{
int tot=0;
for(int col=0;col<4;col++)
tot+=numbers[index][col];
return tot;
}
public static int getColumnTotal (int [][]numbers, int index)
{
int tot=0;
for(int row=0;row<numbers.length;row++)
tot+=numbers[row][index];
return tot;
}
public static int getHighest(int [][]numbers,int row)
{
int high=numbers[row][0];
for(int i=1;i<4;i++)
if(numbers[row][i]>high)
high=numbers[row][i];
return high;
}
public static int getLowest(int [][]numbers,int row)
{
int low=numbers[row][0];
for(int i=1;1<4;i++)
if(numbers[row][i]<low)
low=numbers[row][i];
return low;
}
}
答案1
得分: 1
在你的 getLowest
函数中,你的 for 循环只有在 1 >= 4
时才会退出,但这永远不会成立。你应该使用 i < 4
代替 1 < 4
。
在 for 循环的每次迭代中,它在检查:
- numbers[row][1] < low
- numbers[row][2] < low
- numbers[row][3] < low
- numbers[row][4] < low
- numbers[row][5] < low
- numbers[row][6] < low
- numbers[row][7] < low
- numbers[row][8] < low
- numbers[row][9] < low
- ...
英文:
in your getLowest
function, your for loop only exits when 1 >= 4
, but this will never be true. You should have i < 4
instead of 1 < 4
In every iteration of your for loop, it was checking:
- numbers[row][1]<low
- numbers[row][2]<low
- numbers[row][3]<low
- numbers[row][4]<low
- numbers[row][5]<low
- numbers[row][6]<low
- numbers[row][7]<low
- numbers[row][8]<low
- numbers[row][9]<low
- ...
答案2
得分: 1
看这个:
for(int i=1;1<4;i++)
1 < 4
总是为 true
,所以你在这里有一个无限循环,直到 i == list[row].length
,然后会得到 ArrayIndexOutOfBoundsException
。你应该使用像 IntelliJ IDEA 这样的 IDE,这种问题会被编辑器标记出来。
class TwoDim {
public static void main(String... arg) {
int[][] list = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 }
};
System.out.println("Total: " + getTotal(list));
System.out.format(Locale.ENGLISH, "Average: %.2f\n", getAverage(list));
System.out.println("Row 2 value: " + getRowTotal(list, 2));
System.out.println("Column 3 Total: " + getColumnTotal(list, 3));
System.out.println("Highest value in row 1 is: " + getHighest(list, 1));
System.out.println("Lowest value in row 2 is: " + getLowest(list, 2));
}
public static int getTotal(int[][] list) {
int sum = 0;
for (int row = 0; row < list.length; row++)
for (int col = 0; col < list[row].length; col++)
sum += list[row][col];
return sum;
}
public static double getAverage(int[][] list) {
int sum = 0;
int total = 0;
for (int row = 0; row < list.length; row++)
for (int col = 0; col < list[row].length; col++, total++)
sum += list[row][col];
return (double)sum / total;
}
public static int getRowTotal(int[][] list, int row) {
int sum = 0;
for (int col = 0; col < list[row].length; col++)
sum += list[row][col];
return sum;
}
public static int getColumnTotal(int[][] list, int col) {
int sum = 0;
for (int row = 0; row < list.length; row++)
sum += list[row][col];
return sum;
}
public static int getHighest(int[][] list, int row) {
int high = Integer.MIN_VALUE;
for (int col = 0; col < list[row].length; col++)
high = Math.max(high, list[row][col]);
return high;
}
public static int getLowest(int[][] list, int row) {
int low = Integer.MAX_VALUE;
for (int col = 0; col < list[row].length; col++)
low = Math.min(low, list[row][col]);
return low;
}
}
英文:
Look at this:
for(int i=1;1<4;i++)
1 < 4
is always true
, so you have infinite loop here until i == list[row].length
and you get ArrayIndexOutOfBoundsException
. You should use an IDE like IntelliJ IDEA where such problems are highlited by the editor.
class TwoDim {
public static void main(String... arg) {
int[][] list = {
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 } };
System.out.println("Total: " + getTotal(list));
System.out.format(Locale.ENGLISH, "Average: %.2f\n", getAverage(list));
System.out.println("Row 2 value: " + getRowTotal(list, 2));
System.out.println("Column 3 Total: " + getColumnTotal(list, 3));
System.out.println("Highest value in row 1 is: " + getHighest(list, 1));
System.out.println("Lowest value in row 2 is: " + getLowest(list, 2));
}
public static int getTotal(int[][] list) {
int sum = 0;
for (int row = 0; row < list.length; row++)
for (int col = 0; col < list[row].length; col++)
sum += list[row][col];
return sum;
}
public static double getAverage(int[][] list) {
int sum = 0;
int total = 0;
for (int row = 0; row < list.length; row++)
for (int col = 0; col < list[row].length; col++, total++)
sum += list[row][col];
return (double)sum / total;
}
public static int getRowTotal(int[][] list, int row) {
int sum = 0;
for (int col = 0; col < list[row].length; col++)
sum += list[row][col];
return sum;
}
public static int getColumnTotal(int[][] list, int col) {
int sum = 0;
for (int row = 0; row < list.length; row++)
sum += list[row][col];
return sum;
}
public static int getHighest(int[][] list, int row) {
int high = Integer.MIN_VALUE;
for (int col = 0; col < list[row].length; col++)
high = Math.max(high, list[row][col]);
return high;
}
public static int getLowest(int[][] list, int row) {
int low = Integer.MAX_VALUE;
for (int col = 0; col < list[row].length; col++)
low = Math.min(low, list[row][col]);
return low;
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论