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

Posted

技术标签:

【中文标题】逻辑?调试多次,找不到错误【英文标题】:Logic? Debugged multiple times and cant find the error 【发布时间】:2016-09-24 04:14:32 【问题描述】:

在这个程序中,我从 .txt 文件(以下文件)中检索高温和低温列表987654322@ 方法,所以我可以从一维获得最高和最低温度,但是当我编译并运行它时,我得到了错误的输入,我已经通过调试器多次运行了两个 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;


【问题讨论】:

它没有任何错误。我有以下输出: [[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] 中的最高输入,我不想检查第三列的任何内容,我只想要第二行 @DanishAmjad 【参考方案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;


【讨论】:

谢谢,这正是我要找的,你能告诉我我的哪里出了问题吗? 问题正是我在回答中注释掉的代码。【参考方案2】:
      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;
      

【讨论】:

这仍然不正确 - getLowTemp() 中的第二个下标应该是 1 - 即。 int low = arr[0][1]等通过方法。 它的意思是[0][0]马特,我想找到那个索引中的最低值,我会为另一列@MattPearce做一个单独的方法 啊,很公平。我在您的原始帖子中错过了这一点。【参考方案3】:

快速查看您的代码,我认为您必须有一个数组越界异常:

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

您的数组长度为 12 (0->11),但使用 i+1 您超出了 11 (11+1)

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

【讨论】:

没有错误?我早些时候修复了这个问题我只是想解决这个当前的问题【参考方案4】:

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

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

【讨论】:

以上是关于逻辑?调试多次,找不到错误的主要内容,如果未能解决你的问题,请参考以下文章

在调试模式下找不到此可执行文件的有效配置文件

调试错误:找不到字符串资源 7176

GLSL:找不到我的自定义函数

CakePHP 在不引用调试器的文件中出现“致命错误:找不到类‘调试器’”

VS 2010 C# 文件没有错误,但是当我调试时说它找不到神秘文件

cygwin $'\r': 找不到命令错误