如何确定从Java中的文本文件读入的最大值和最小值

我正在为一堂课做家庭作业,我正在寻找一些有用的指针,而不是完整的解决方案。 基本上,我必须编写一个Java程序,该程序读入文本文件并逐行列出信息,列出行号,最后打印出最大值和最小值以及与每个值相关的年份。 文本文件包含该年份和该年份的温度。 因此,它列出了类似“1900 50.9”的内容。 我不打算使用数组或扫描仪,这是作业的一部分。 我已经能够成功地使程序每年打印出来,并且相应的温度与行数一致。 我被告知,并确实使用了while循环。 现在,我唯一的问题是以某种方式访问​​文本文件,我可以以某种方式区分所有温度,这是最大值,哪个是最小值,以及每个温度发生在哪一年。我到目前为止还没有寻求帮助因为我希望能够自己解决这个问题,但由于延迟处罚,这项任务不再值得信任。 任何帮助都会非常感激,因为我仍然想解决这个问题。 谢谢。

这就是我所拥有的。

public class main { /** * @param args the command line arguments */ public static void main(String[] args) throws Exception { File temps = new File ("temps.txt"); //Creates path to temps.txt file FileReader textReader = new FileReader (temps); //Input information from temps.txt file into file reader BufferedReader kb = new BufferedReader (textReader); //Use buffered reader to hold temps.txt file info from the file reader String tempList; //Create string variable named tempList int lineCount = 0; //Create integer variable named lineCount String sep = ": Temp "; //Create string variable named sep (short for separation) and set it equal to the literal string ":" String space = " "; //Create string variable named space and set it equal to an actual space between texts System.out.println("The following is the provided information from the file input. "); while ((tempList = kb.readLine()) !=null) { //while loop stating that as long as the text file still has values to read (is not null), continue to execute System.out.println("Line " + lineCount++ + ": Year " + tempList.replace(space, sep)); //Prints out the line number (lineCount++), the info from the temps.txt file with a ":" between the year and the number (tempList.replace (space,sep) } } 

}

到目前为止的输出是这样的:

 Line 0: Year 1900: Temp 50.9 Line 1: Year 1901: Temp 49 Line 2: Year 1902: Temp 49.7 Line 3: Year 1903: Temp 49.5 Line 4: Year 1904: Temp 47.1 Line 5: Year 1905: Temp 49.1 

等等……一直到……

 Line 99: Year 1999: Temp 52.7 BUILD SUCCESSFUL (total time: 0 seconds) 

这是一种方法:

 String tempList; //Create string variable named tempList int lineCount = 0; //Create integer variable named lineCount String sep = ": Temp "; //Create string variable named sep (short for separation) and set it equal to the literal string ":" String space = " "; //Create string variable named space and set it equal to an actual space between texts String maxValueYear = ""; String minValueYear = ""; double maxValue = 0; double minValue = Double.MAX_VALUE; System.out.println("The following is the provided information from the file input. "); while ((tempList = kb.readLine()) !=null) { //while loop stating that as long as the text file still has values to read (is not null), continue to execute String year = tempList.substring(0, tempList.indexOf(space)); double temp = Double.valueOf(tempList.substring(tempList.indexOf(space), tempList.length())); if (temp > maxValue) { maxValue = temp; maxValueYear = year; } if (temp < minValue) { minValue = temp; minValueYear = year; } System.out.println("Line " + lineCount++ + ": Year " + tempList.replace(space, sep)); //Prints out the line number (lineCount++), the info from the temps.txt file with a ":" between the year and the number (tempList.replace (space,sep) } System.out.println("The minimum temp occured in year " + minValueYear + " and was " + minValue); System.out.println("The maximum temp occured in year " + maxValueYear + " and was " + maxValue); 

您需要使用一些变量来跟踪最小和最大温度。
每当更高(​​更低)的温度出现时,您都会更新变量。

好的,从循环外的极高和非常低的最小值开始。
一旦在循环内看到(较高的)较低温度,就会调整变量。
循环后你回顾一下。

 Highest Seen So Far: -Infinity (or any really low number so that any number you see next will be higher) Lowest Seen So Far: Infinity (or any really high number so that any number you see next will be lower) Walk through each data point "d": is d higher than your latest "highest seen so far"? -> if yes, your new highest seen so far is now d is d lower than your latest "lowest seen so far"? -> if yes, your new lowest seen so far is now d Your highest seen so far is now the highest data point Your lowest seen so far is now the lowest data point 

在伪代码中:

 highest = -inf lowest = inf for d in dataset: if d > highest: highest = d if d < lowest: lowest = d print "highest: " + highest print "lowest: " + lowest 

这是一个例子

假设您的数据集是5 2 8 4

 Step 0 Highest: -inf Lowest: inf Step 1 See d = 5...that's higher than highest -inf, so new highest is 5. See d = 5...that's lower than lowest -inf, so new lowest is 5 Highest: 5 Lowest: 5 Step 2: See d = 2...that's not higher than highest 5...highest is still 5 See d = 2...that is lower than lowest 5...new lowest is 2 Highest: 5 Lowest: 2 Step 3: See d = 8...that's higher than highest 5...new highest is 8 See d = 8...that's not lower than lowest 2...lowest is still 2 Highest: 8 Lowest: 2 Step 4: See d = 4...that's not higher than highest 8...highest is still 8 See d = 4...that's not lower than lowest 2...lowest is still 2 Highest: 8 Lowest: 2 Result: Highest: 8 Lowest: 2