当用户输入无效输入时,如何终止程序?

时间:2018-02-22 19:21:10

标签: java

这只是我代码的一部分。所有6个变量都采用相同的结构。 (水平除外)。一旦读入,这将打印输入计算奖金。奖金应该是0为10,每个偶数高于10的累积+1和低于10的每个奇数的-1.如果输入无效输入,我该如何终止。我是否必须对所有输入使用if条件..

import java.util.Scanner;
 public class Game{
  public static void main(String[]args){
    Scanner sc = new Scanner(System.in);

    int bonus,x;
    double HP;

    System.out.print("Enter Str : ");
    int Str = sc.nextInt();

    System.out.print("Enter Dex : ");
    int Dex = sc.nextInt();

    System.out.print("Enter Con : ");
    int Con = sc.nextInt();

    System.out.print("Enter Int : ");
    int Int = sc.nextInt();

    System.out.print("Enter Wis : ");
    int Wis = sc.nextInt();

    System.out.print("Enter Cha : ");
    int Cha = sc.nextInt();

    System.out.print("Enter Level : ");
    int Level = sc.nextInt();

    System.out.println("\nLevel : "+Level);

    if ( Str == 10 ) {
        bonus = 0;
        System.out.println("Str : "+Str+"["+bonus+"]");
    }
        else if ( Str < 10 && Str % 2 == 0 ) {
            bonus = 0 ;
            for ( x = Str; x <= 10; x++ ) {
            if ( x % 2 != 0 ) {
                bonus = bonus + 1 ;             
            }
        }
         System.out.println("Str : "+Str+"[+"+bonus+"]");
        }
         else if ( Str < 10 && Str % 2 != 0 ) {
            bonus = 0 ;
            for ( x = Str; x <= 10; x++ ) {
            if ( x % 2 == 0 ) {
                bonus = bonus + 1 ;             
            }
        }
         System.out.println("Str : "+Str+"[-"+bonus+"]");
        }
        else if ( Str > 10 && Str % 2 == 0 ) {
            bonus = 0 ;
            for ( x = 10; x <= Str; x++ ) {
            if ( x % 2 != 0 ) {
                bonus = bonus + 1 ;             
            }
        }
         System.out.println("Str : "+Str+"[+"+bonus+"]");
        }
        else if ( Str > 10 && Str % 2 != 0 ) {
            bonus = 0 ;
            for ( x = 10; x <= Str; x++ ) {
            if ( x % 2 == 0 ) {
                bonus = bonus + 1 ;             
            }
        }
         System.out.println("Str : "+Str+"[-"+bonus+"]");
        }

3 个答案:

答案 0 :(得分:0)

您正在寻找的是:

  

System.exit()的;

这是一个很好的link

答案 1 :(得分:0)

int Str = sc.nextInt();

如果用户输入的字符串无法解析为整数,则该行将引发异常。如果您没有捕获此异常,程序将打印回溯并中止。

每次尝试读取整数都会发生同样的事情。 如果你成功读取了整数,那么你只需要测试正确的值,如果不正确,就像其他人所说的那样,调用System.exit()来退出

答案 2 :(得分:0)

您可以在代码中改进一些内容。

您必须知道扫描程序必须在执行后关闭,但很高兴它实现了Closeable接口,因此如果您在try中打开它将自动关闭,如下所述:https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

当输入不是有效整数时,sc.nextInt()将抛出InputMismatchException,因此您可以捕获它并退出。

基本上,您可以在try-catch子句中编写代码,如下所示:

    try (Scanner sc = new Scanner(System.in)){

        int bonus,x;
        double HP;

        System.out.print("Enter Str : ");
        int Str = sc.nextInt();

        // here the rest of your code ...

    } catch (InputMismatchException e) {
        System.err.println("Error processing inputs, exiting... ");
        System.exit(-1);
    } 
    // after try/catch block scanner is closed