2012-09-23 184 views
1

我需要int num只接受数字。如果我输入字母,则会出现错误。有没有办法立即标志字母,或者我必须采取num作为字符串并运行循环?输入编译错误Java

import java.util.Scanner; 

public class Test 
{   
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Input a number."); 
     int num = input.nextInt(); 
    } 
} 
+0

没有声明变量(即声明为'Scanner',我想象的是你想要的,并实例化)名为'input'的变量。 – Makoto

+0

@Makoto检查导入语句。他可能没有在这里复制整个代码 – vikiiii

+0

那时候'input'将会是一个静态变量,并且可能会被副本抓取。但你可能是对的... – Makoto

回答

0

你可能想要做这样的事情:

import java.util.InputMismatchException 
import java.util.Scanner; 

public class Test { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     System.out.println("Input an integer."); 
     int num = 0; // or any other default value 
     try { 
      num = input.nextInt(); 
     } catch (InputMismatchException e) { 
      System.out.println("You should've entered an integer like I told you. Fool."); 
     } finally { 
      input.close(); 
     } 
    } 
} 

如果用户输入的东西是不是一个整数,则catch块中的代码会被执行。

+0

好的,所以我尝试了这一点,但现在我的代码中没有看到我的num变量。我如何解决这个问题? – Tooilia

+0

查看上面的修改。如果用户给你提供无效输入,你可以将'num'初始设置为想要的默认值。 – arshajii

+0

通过编辑,它可以看到num,但它的值保持为0. – Tooilia

1

您必须使用Scanner.hasNextInt():

它如果此扫描器输入信息的下一个标记可以解释为使用nextInt()方法默认基数中的一个int值,则返回true。扫描仪不会超过任何输入。

public static void main(String[] args) 
{ 
System.out.println("Input a number."); 
Scanner sc = new Scanner(System.in); 
System.out.print("Enter number 1: "); 
while (!sc.hasNextInt()) sc.next(); 
int num = sc.nextInt(); 

System.out.println(num); 

} 
+0

感谢小费! – Tooilia

+0

如果此功能适用于您,请将答案标记为已接受。 – vikiiii