2014-04-14 20 views
0

我是一个绝对的初学者,没有任何编程语言的经验。输入字符串而不是整数(Java)

我写了一个程序作为将阿拉伯数字转换成罗马数字的练习。有用。不过,如果输入字符串而不是整数,我想添加一个用于处理问题的部分。不知道如何做到这一点。我试图使用try/catch,但我不知道如何正确使用它。现在程序要我两次输入一个数字。该怎么办?

这里是他的主要方法:

public static void main(String[] args) { 

    int numArabic; 
    boolean validEntry; 

    try { 
      System.out.println("Enter an integer number between 1 and 3999!"); 
      Scanner scan = new Scanner(System.in); 
      numArabic = scan.nextInt(); 
      validEntry = true; 
     } catch (InputMismatchException e) { 
      System.out.println("Entered value is not an integer!"); 
     } 

    System.out.println("Enter an integer number between 1 and 3999!"); 
    Scanner scan = new Scanner(System.in); 
    numArabic = scan.nextInt();        

    if ((numArabic < 1) || (numArabic > 3999)) { 
      System.out.println(); 
      System.out.print("Wrong number. "); 
      System.out.print("Enter an integer number between 1 and 3999!"); 
      System.out.println(); 
      } 
    else { 
      String numRoman1 = toRomanOne(numArabic % 10); 
      String numRoman2 = toRomanTwo(((numArabic/10) % 10)); 
      String numRoman3 = toRomanThree(((numArabic/100) % 10)); 
      String numRoman4 = toRomanFour(numArabic/1000); 
      System.out.print("The number " + numArabic + " is equal to: "); 
      System.out.print(numRoman4+numRoman3+numRoman2+numRoman1 + "."); 
    } 
} 
+2

现在程序要我两次输入一个数字。那是因为你在做 - System.out.println(“输入1到3999之间的整数!”); Scanner scan = new Scanner(System.in); numArabic = scan.nextInt();两次 – TheLostMind

+0

运行: 输入1到3999之间的整数! jjk 输入的值不是整数 输入1到3999之间的整数! KKJ 异常在线程 “主” java.util.InputMismatchException \t在java.util.Scanner.throwFor(Scanner.java:864) \t在java.util.Scanner.next(Scanner.java:1485) \t在java.util.Scanner.nextInt(Scanner.java:2117) \t在java.util.Scanner.nextInt(Scanner.java:2076) \t在arabictoroman.ArabicToRoman.main(ArabicToRoman.java:35) Java结果:1 – maxval

+0

“那是因为你在做 - System.out.println(”输入1到3999之间的整数!“); Scanner scan = new Scanner(System.in); numArabic = scan.nextInt();两次”好的,但该怎么办?如果我不再问它,我会得到“变量未初始化”。 – maxval

回答

1

您的控制机制是真实的,但只能使用一次。你必须把它放在一个循环中,以便它可以允许用户最后输入一个整数。

boolean validEntry; 

do { 
    try { 
     System.out.println("Enter an integer number between 1 and 3999!"); 
     Scanner scan = new Scanner(System.in); 
     numArabic = scan.nextInt(); 
     validEntry = true; 
    } 
    catch (InputMismatchException e) { 
     validEntry = false; 
     System.out.println("Entered value is not an integer!"); 
    } 
} 
while(!validEntry); 
+0

+1通过不改变OP的代码来提供答案。 –

0

您可以使用Scanner#hasNextInt()方法来检查。

如果此扫描器输入中的下一个标记可被解释为int值,则此方法返回true

if (scan.hasNextInt()) { 
    // Do the process with Integer. 
} else { 
    // Do the process if it is not an Integer. 
} 

需要注意的是,这将覆盖所有这一切都没有Integer的投入,不仅String

+1

谢谢,这有助于。 – maxval

0
public static void main(String[] args) { 

    int numArabic; 
    boolean validEntry = false; 

    while (validEntry = false){ 
    try { 

      System.out.println("Enter an integer number between 1 and 3999!"); 
      Scanner scan = new Scanner(System.in); 
      numArabic = scan.nextInt(); 
      validEntry = true; 
     } 

     catch (InputMismatchException e) { 
      System.out.println("Entered value is not an integer!"); 
      validEntry = false; 
     } 
    }     

    if ((numArabic < 1) || (numArabic > 3999)) { 
      System.out.println(); 
      System.out.print("Wrong number. "); 
      System.out.print("Enter an integer number between 1 and 3999!"); 
      System.out.println(); 
      } 
    else { 
      String numRoman1 = toRomanOne(numArabic % 10); 
      String numRoman2 = toRomanTwo(((numArabic/10) % 10)); 
      String numRoman3 = toRomanThree(((numArabic/100) % 10)); 
      String numRoman4 = toRomanFour(numArabic/1000); 
      System.out.print("The number " + numArabic + " is equal to: "); 
      System.out.print(numRoman4+numRoman3+numRoman2+numRoman1 + "."); 
    } 
} 
+0

错误的答案请运行它不在里面的程序。 – Benjamin

0

试试这个:

 boolean b=true; 
    while(b) 
    { 
     try 
     { 
     System.out.println("Enter an integer number between 1 and 3999!"); 
     Scanner scan = new Scanner(System.in); 
     numArabic = scan.nextInt(); 
     validEntry = true; 
     } 
     catch (InputMismatchException e) 
     { 
      System.out.println("Entered value is not an integer!"); 

     } 
     if(validEntry) 
     { 
     if ((numArabic < 1) || (numArabic > 3999)) 
     { 
     System.out.println(); 
     System.out.print("Wrong number. "); 
     System.out.print("Enter an integer number between 1 and 3999!"); 
     System.out.println(); 
     } 
     else 
     { 
     String numRoman1 = toRomanOne(numArabic % 10); 
     String numRoman2 = toRomanTwo(((numArabic/10) % 10)); 
     String numRoman3 = toRomanThree(((numArabic/100) % 10)); 
     String numRoman4 = toRomanFour(numArabic/1000); 
     System.out.print("The number " + numArabic + " is equal to: "); 
     System.out.print(numRoman4+numRoman3+numRoman2+numRoman1 + "."); 
     } 
     b=false; 
    }//end of if 
}//end of while 
-1

试试这个,

你需要先初始化numArabic一些价值。

public static void main(String[] args) { 
    int numArabic = 0; 
    boolean validEntry; 

    try { 
     System.out.println("Enter an integer number between 1 and 3999!"); 
     Scanner scan = new Scanner(System.in); 
     numArabic = scan.nextInt(); 
     validEntry = true; 
    } 

    catch (InputMismatchException e) { 
     System.out.println("Entered value is not an integer!"); 
    } 


    if ((numArabic < 1) || (numArabic > 3999)) { 

    } else { 

    } 

} 
-1

你输入什么程序是从语法错误和逻辑errors.But免费问只有一次进入整数值只是重写代码following.We在捕捉附着第二SOP功能block.So如果输入不匹配,它会要求再次输入。 public static void main(String [] args){

int numArabic; 
    boolean validEntry; 

    try { 
      System.out.println("Enter an integer number between 1 and 3999!"); 
      Scanner scan = new Scanner(System.in); 
      numArabic = scan.nextInt(); 
      validEntry = true; 
     } catch (InputMismatchException e) { 
      System.out.println("Entered value is not an integer!"); 


System.out.println("Enter an integer number between 1 and 3999!"); 
     Scanner scan = new Scanner(System.in); 
     numArabic = scan.nextInt(); 
     } 
相关问题