提问人:Saad Belkhou 提问时间:12/4/2020 更新时间:12/4/2020 访问量:51
即使所有类型都正确,我仍然收到 InputMismatchException,ido 应该怎么做?
I keep getting an InputMismatchException even though all types are correct , what should ido?
问:
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);
}
}
我试图仅从给定的文本中收集 temperatur 的值:
2018年10月16日 德国空军 1014.7
2018年10:17 Niederschlag 1.3
2018 10:15 温度 18.2
2018年10月16日 尼德施拉格 0.0
并返回当天的最高温度。
2018:10:17 温度:16.8
答:
0赞
CryptoFool
12/4/2020
#1
您通过 ur 读取每一行的逻辑不正确。只看代码的这一部分,它应该读取一行:Scanner
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.nextLine()
discription
true
discription
Temperatur 16.8
sc.nextDouble()
nextInt()
day
0赞
kasptom
12/4/2020
#2
// ...
double sum = 0.0;
String line;
while (!(line = sc.nextLine()).isBlank()) { // 1
String[] splitLine = line.trim().split(" "); // 2
discription = splitLine[3];
if (discription.equals("Temperatur")) {
value = Double.parseDouble(splitLine[4]);
sum = sum + value;
if (value >= warmest) {
warmest = value;
year = Integer.parseInt(splitLine[0]); //3
month = Integer.parseInt(splitLine[1]);
day = Integer.parseInt(splitLine[2]);
}
}
}
sc.close();
// ...
言论:
//1
您需要知道何时停止读取输入 - 例如,您可以检查下一行是否为空//2
为了避免评论中提到的问题,我会阅读整行并将每个空格分隔的部分解析为预期的类型//3
似乎您想存储最热的一天的 ,因此只有在找到更高的温度时才应该更新它。year
month
day
评论
value = sc.nextDouble();
从输入的第二行读取...因此,尝试读取 int 以防止导致异常2018
day= sc.nextInt();
Niederschlag