我试图处理用户输入并且只允许输入浮点数。可以输入的浮点数是无限制的,但如果输入两个连续的非浮点数,程序将结束。当程序结束时,它将打印所有数字的总和。
问题是每当我运行它时,它会立即运行while循环并将计数增加到2并打破循环。您只能在取消之前输入一个非浮动。
while(true){
try{
sum+= inRead.nextFloat();
}
catch (InputMismatchException e){
if (count == 2){
System.out.println(sum);
break;
}
else{
count+=1;
}
}
}
编辑:正如你们中的一些人所指出的,应该在while循环之前初始化count
Scanner inRead = new Scanner(System.in);
float sum = 0;
int count = 0;
while(true){
try{
sum+= inRead.nextFloat();
}
catch (InputMismatchException e){
if (count == 2){
System.out.println(sum);
break;
}
else{
count+=1;
}
}
}
答案 0 :(得分:1)
试试这个:
Scanner inRead = null;
float sum = 0;
int count = 0;
while(true){
try{
inRead = new Scanner(System.in);
sum+= inRead.nextFloat();
if(count == 1) {
count = 0;
}
}
catch (InputMismatchException e){
if (count == 1){
System.out.println(sum);
break;
}
else{
inRead = null;
count+=1;
}
}
}
代码中的counter
增量为2,因为当您在InputMismatchException
方法中遇到nextFloat()
时。您遇到的第二个nextFloat()
将无效,因为您需要为此创建new Scanner
,因为它会在循环中导致错误,并在您需要重置时添加if(count == 1)
0 因此当输入两个连续的非浮动时,它可以满足您的问题停止并添加所有。
答案 1 :(得分:0)
你应该在while循环开始之前将count
初始化为0
并且一切正常。如果您已将count
初始化为1
,那么当输入非浮点数时,count
变为2
,如果输入非浮点数,则下次循环终止。
答案 2 :(得分:0)
也许您在代码中较早的某处重用了变量count
,导致它由于值不正确而提前中断。
您应该将count
初始化为0
,并且只有在输入非浮点数时才会递增。
发布更多代码有助于解决问题。
答案 3 :(得分:-1)
接受的答案已被破坏,因为构建了其他Scanner
个实例may actually discard parts of the input。我强烈建议only ever using one object to read from System.in
,因为像Scanner
这样的输入阅读器对象可以(并且常见)从源内部缓冲数据,并用新实例替换该对象会丢弃第一个输入对象已经缓冲。
也没有必要得到你想要的行为。而是使用.next()
跳过下一个令牌(如果它无效),并使用.hasNextDouble()
确定下一个令牌是否为有效double
(而不是捕获InputMismatchException
)。
try (Scanner in = new Scanner(System.in)) {
double sum = 0;
boolean lastInputBad = false;
while (true) {
if (in.hasNextDouble()) {
sum += in.nextDouble();
lastInputBad = false;
} else if (lastInputBad) {
break; // break the loop on a subsequent bad input
} else {
in.next(); // skip first bad input
lastInputBad = true;
}
}
System.out.println("Sum of valid inputs: " + sum);
}
另请注意,我使用的是double
,而不是float
。基本上no reason to use float
in modern code;坚持double
。