import java.util.Scanner;
public class Messdaten {
public static double temperaturInDurchschnitt(Scanner sc){
int year= 0, month= 0 , day= 0;
String discription = "";
double value= 0.0;
double warmest= -273.15;
int i = 0;
double sum = 0.0;
while (sc.hasNext()) {
year= sc.nextInt();
month= sc.nextInt();
day= sc.nextInt();
discription = sc.nextLine();
if (discription.equals("Temperatur")){
value= sc.nextDouble();
sum = sum + value;
if (value>= warmest){
warmest = value;
}
}
value = sc.nextDouble();
} sc.close();
System.out.println("highest Temperatur " + "(" + warmest+ ")" + "at" + day+ month+ year);
return sum/i;
}
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
temperaturInDurchschnitt(sc);
}
}
我试图仅从给定的文本中收集温度值:
2018 10 16德国航空公司1014.7
2018年10月17日niederschlag 1.3
2018 10 15温度18.2
2018年10月16日niederschlag 0.0
返回当天的最高温度。
2018 10 17温度16.8
2条答案
按热度按时间xa9qqrwz1#
你的逻辑是通过你的
Scanner
不正确。看看你的代码中应该只读一行的部分:当你打电话的时候
sc.nextLine()
,您现在已经阅读了该行的其余部分并将其分配给discription
. 所以接下来的支票永远不会兑现true
,因为即使在应该成功的地方,discription
将Temperatur 16.8
. 但我认为你在到达之前就偏离了轨道。当你打电话的时候sc.nextDouble()
,您将无法获得行末尾的值,因为您已经阅读了整行。相反,您将从下一行获得年份值。现在你和你的输入数据不同步了。我希望你打电话时会出错nextInt()
阅读day
值,得到的是description值而不是day值,当然,day值不能解析为整数。tktrz96b2#
评论:
//1
您需要知道何时停止读取输入-例如,您可以检查下一行是否为空//2
为了避免注解中提到的问题,我将阅读整行并将每个空格分隔的部分解析为预期的类型//3
好像你想把year
,month
以及day
最热的一天,所以只有当你发现更高的温度时才应该更新。