[英]How to Determine the Max and Min Values Read in From a Text File in 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.