Java 逻辑?已调试多次,找不到错误

Java 逻辑?已调试多次,找不到错误,java,for-loop,logic,logical-operators,Java,For Loop,Logic,Logical Operators,在这个程序中,我从一个.txt文件(下面的文件)中检索了一个高温和低温列表,在第一个for循环中,我将高温和低温分离成一个2D数组,然后创建了一个getLowTemp()和getHighTemp()方法,这样我就可以从一维获得最高和最低温度,但是当我编译并运行它时,我得到了错误的输入,我已经通过调试器多次运行了这两个for循环,并且找不到原因,有人能告诉我为什么我的两个方法不工作吗 text.txt文件 JAN 48 2 FEB 53 6 MAR 57 30 APR 54 34 MAY 73 3

在这个程序中,我从一个.txt文件(下面的文件)中检索了一个高温和低温列表,在第一个for循环中,我将高温和低温分离成一个2D数组,然后创建了一个
getLowTemp()
getHighTemp()
方法,这样我就可以从一维获得最高和最低温度,但是当我编译并运行它时,我得到了错误的输入,我已经通过调试器多次运行了这两个for循环,并且找不到原因,有人能告诉我为什么我的两个方法不工作吗

text.txt文件

JAN 48 2
FEB 53 6
MAR 57 30
APR 54 34
MAY 73 37
JUN 85 52
JUL 91 59
AUG 87 61
SEP 81 49
OCT 63 38
NOV 61 29
DEC 52 17
温度等级

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;

public class Temperature 
{
static String fileName, line;
static int high;

public static void main(String[] args) throws IOException 
{
    int[][] temps = new int[12][2];
    Scanner scanner = new Scanner(new File("text.txt"));
    for(int i=0;i<temps.length;i++) 
    {
       String months = scanner.next();
       int high = scanner.nextInt();
       temps[i][0] = high;
       int low = scanner.nextInt();
       temps[i][1] = low;
    }
    System.out.println(Arrays.deepToString(temps)); //printed the whole array to make sure placed correctly
    int highestTemp = getHighTemp(temps);
    System.out.println("Highest Temp: " + highestTemp);
    int lowestTemp = getLowTemp(temps);
    System.out.println("Lowest Temp: " + lowestTemp);


}


public static int getHighTemp(int[][] arr) 
{
    int high = arr[0][0];
    for(int i = 0; i<11;i++){
        int nextValue =  arr[i+1][0];
        if(high < nextValue)
            high = nextValue;
        else
            high = arr[i][0];
    }
    return high;

}


public static int getLowTemp(int[][] arr) 
{
    int low = arr[0][0];
    for(int i = 0; i<11;i++)
    {
        int nextValue =  arr[i+1][0];

        if(low > nextValue)
            low = nextValue;
        else
            low = arr[i][0];
    }
    int lowestValue = low;
    return lowestValue;

}
导入java.io.File;
导入java.io.IOException;
导入java.util.array;
导入java.util.Scanner;
公共级温度
{
静态字符串文件名,行;
静态int高;
公共静态void main(字符串[]args)引发IOException
{
int[]temps=新int[12][2];
扫描仪=新扫描仪(新文件(“text.txt”);
对于(int i=0;i
publicstatic int getHighTemp(int[]]arr)//从所有最高值中获取最高值
{
int高=arr[0][0];

对于(int i=0;i快速查看代码,您必须有一个数组越界异常,我认为:

for(int i = 0; i<11;i++){
        int nextValue =  arr[i+1][0];
for(int i=0;i11),但如果i+1,则从11(11+1)中退出


然后在getHighTemp和getLowTemp中解析相同的值,始终为高。

方法中存在逻辑错误-假设如果下一个值不高于或低于当前值,则当前值必须为最高/最低值。因此,结果始终是数组中的最后一个值。因此:

if (high < nextValue) 
    high = nextValue
// else
//     high = arr[i][0];
if(高
您的逻辑存在两个主要问题。 1.您在for循环的else语句中不断更新您的低/高目标。如果删除它们,您将得到正确的答案

2.您正在“高值”列中搜索最低值。因此,使用arr[i][1]也解决了此问题

public static int getHighTemp(int[][] arr) 
{
    int high = -1;
    for(int i = 0; i<12;i++){
        if(high<arr[i][0])
            high = arr[i][0];
    }
    return high;
}

public static int getLowTemp(int[][] arr) 
{
    int low = 665456456;
    for(int i = 0; i<12;i++){
        if(low>arr[i][1])
            low = arr[i][1];
    }
    return low;

}
public static int getHighTemp(int[]arr)
{
int高=-1;

对于(inti=0;iIt工作没有任何错误。我在输出中得到了以下结果:[48,2],[53,6],[57,30],[54,34],[73,37],[85,52],[91,59],[87,61],[81,49],[63,38],[61,29],[52,17]:最高温度:61最低温度:52@DanishAmjad最高温度应该是91,因为它只应该通过[0-11][0]中的值,61在[0-11]中[1] 我的意思是我想要[0-11][0]中的最高输入,我不想检查第三列中的任何内容,我只想要第二行@DanishAmjadNo错误?我修复了之前的问题,现在我只是试图解决当前的问题这仍然是不正确的-getLowTemp()中的第二个下标应该是1-即
int low=arr[0][1]
等,通过该方法执行。它应该是[0][0]Matt,我想找到该索引中的最低值,我将为另一列@MattPearceAh创建一个单独的方法,这很公平。我在你的原始帖子中遗漏了该方法。谢谢,这正是我想要的,你能告诉我我的有什么问题吗?问题正是我在回答中注释的代码。
public static int getHighTemp(int[][] arr) 
{
    int high = -1;
    for(int i = 0; i<12;i++){
        if(high<arr[i][0])
            high = arr[i][0];
    }
    return high;
}

public static int getLowTemp(int[][] arr) 
{
    int low = 665456456;
    for(int i = 0; i<12;i++){
        if(low>arr[i][1])
            low = arr[i][1];
    }
    return low;

}