package pkgswitch;
import java.util.Scanner;
public class Switch {
public static void main(String[] args) {
double subtotal = 0.0;
Scanner sc = new Scanner(System.in);
outerloop:
while(0==0){
System.out.print("Enter subtotal: ");
if (sc.hasNextDouble())
{
subtotal=sc.nextDouble();
}
else
{
sc.nextLine();
System.out.println("Error!");
continue outerloop;
}
}
}
}
我正在学习如何捕捉异常。 (我知道try
/ catch
)
如果扫描仪在没有输入的情况下进行初始化时,如何获得更多的双重标记
答案 0 :(得分:1)
如果扫描仪在没有输入的情况下进行初始化后,如何获得更多的双重标记?
您的代码未使用"无输入"初始化扫描仪。它使用System.in
初始化它。
实际发生的是sc.hasNextDouble()
尝试从输入流中读取和缓冲字符...如果用户尚未键入它们则阻止。当方法有足够的字符来确定它是否具有有效的double
令牌时,它会返回true
...或false
。
顺便说一下:
while (0 == 0) {
很傻。请不要这样做。它会导致读者浪费他/她的时间:
答案 1 :(得分:0)
System.in
是InputStream
。从javadoc中,读取“块直到输入数据可用,检测到流的末尾,或者抛出异常”。
答案 2 :(得分:0)
没有。看看这个:我在你的代码中添加了两个打印语句。如果你运行它,你会看到方法hasNextDouble()在输入值之前不会返回任何内容。因此,如果你键入一个double,那么hasNextDouble()将返回true,程序会将小计设置为该值(同样,不确定,但在我看来,你可能想要添加到小计而不是设置它的值)。
public static void main(String[] args) {
double subtotal = 0.0;
Scanner sc = new Scanner(System.in);
outerloop:
while(0==0){
System.out.print("Enter subtotal: ");
if (sc.hasNextDouble())
{
System.out.println("has next double."); /* added */
subtotal=sc.nextDouble();
System.out.println("read double: "+subtotal);
}
else
{
System.out.println("no next double"); /* added */
sc.nextLine();
System.out.println("Error!");
continue outerloop;
}
}
}
答案 3 :(得分:0)
首先,while(true)
比while(0==0)
更好。当它打印“输入子总数”时,你可以给出一个双精度(前3.0)。然后sc.hasNextDouble()
变为真,无论if语句中的代码如何运行。如果你给出的输入不是double(ex'k'),那么sc.hasNextDouble()
就会变为false而其他内容正在运行。