逻辑?多次调试,无法找到错误

时间:2016-05-26 08:57:16

标签: java for-loop logic logical-operators

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

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;

}

}

4 个答案:

答案 0 :(得分:1)

您的逻辑存在两个主要问题。  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;

}

答案 1 :(得分:0)

      public static int getHighTemp(int[][] arr) // get highest from all the highest
      {
        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) // get lowest from all the highest
      {
        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;
      }

答案 2 :(得分:0)

快速查看您的代码,您必须拥有一个超出绑定异常的数组:

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

你的数组长度是12(0-> 11)但是i + 1你是11(11 + 1)

然后你在getHighTemp和getLowTemp中解析相同的值,总是高。

答案 3 :(得分:0)

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

if (high < nextValue) 
    high = nextValue
// else
//     high = arr[i][0];