Java 如何使用用户输入使健壮性发挥作用?

Java 如何使用用户输入使健壮性发挥作用?,java,robustness,robust,Java,Robustness,Robust,我曾尝试在java上编写一个健壮的代码,但它似乎不起作用。我要找的是用户输入一个输入,如果它不是必需的输入,程序将检查输入,然后给用户一个选项重新输入适当的输入,直到输入与必需的输入匹配,或者干脆退出。这是我到目前为止所拥有的。当我运行这段代码时,除了用户输入错误并想要退出外,其他一切都正常工作。while循环保持运行,即使用户重新输入正确的输入或退出,也不会停止。我怎样才能做到这一点 //question System.out.println("Summer, Winter,

我曾尝试在java上编写一个健壮的代码,但它似乎不起作用。我要找的是用户输入一个输入,如果它不是必需的输入,程序将检查输入,然后给用户一个选项重新输入适当的输入,直到输入与必需的输入匹配,或者干脆退出。这是我到目前为止所拥有的。当我运行这段代码时,除了用户输入错误并想要退出外,其他一切都正常工作。while循环保持运行,即使用户重新输入正确的输入或退出,也不会停止。我怎样才能做到这一点

    //question
    System.out.println("Summer, Winter, Fall, or Spring");
    System.out.print("Which season is your favarite? ");
    String favSeason = in.next();
    System.out.println();

    //Control the inputs by converting them to Upper Case
    String favSeasonInput = favSeason.toUpperCase();

    //required answers of the question
    String seasons = "SUMMER, WINTER, FALL, SPRING?";
    String quit = "QUIT!";

    boolean isSeasons = (favSeasonInput.equals(seasons.substring(0, 6)) ||
            favSeasonInput.equals(seasons.substring(8, 14)) ||
            favSeasonInput.equals(seasons.substring(16, 20)) ||
            favSeasonInput.equals(seasons.substring(22, 28)));
    boolean isQuit = favSeasonInput.equals(quit.substring(0, 4));
    //inialize variables that will compute scores
    int favSeasonScore = 0;

    //if user enters an input otherthan seasons
    while (!isSeasons){

        favSeason = in.next();

        if(isQuit){
            System.exit(0); 
        }

    }


    //Conditions to set up scores for seasons
    if(favSeasonInput.equals(seasons.substring(0, 6))){
        favSeasonScore = 6;
        System.out.println("Summer is " + favSeasonScore + " points");
    }
    else if(favSeasonInput.equals(seasons.substring(8, 14))){
        favSeasonScore = 14;
        System.out.println("Winter is " + favSeasonScore + " points");
    }
    else if(favSeasonInput.equals(seasons.substring(16, 20))){
        favSeasonScore = 20;
        System.out.println("Fall is " + favSeasonScore + " points");
    }
    else if(favSeasonInput.equals(seasons.substring(22, 28))){
        favSeasonScore = 28;
        System.out.println("Spring is " + favSeasonScore + " points");
    }

    System.out.println(favSeasonScore);

问题是,当您读取新输入时,您没有更新布尔变量的值;你甚至没有把它读入同一个变量

因此:

应该是:

favSeasonInput = in.next().toUpperCase();
isSeaons = ...;
isQuit = ...;

但请注意,这种检查有效输入的方法非常糟糕。它效率很低(每次检查时都会拉出子字符串),但也非常脆弱(必须正确获取这些索引),并且当需求发生变化时,必须在多个位置更新代码

您正在将字符串映射为整数,因此请使用映射:

Map<String, Integer> seasonScores = new HashMap<>();
seasonScores.put("SPRING", 28);
// Etc.
你的条件句消失了,变成:

seasonScore = seasonScores.get(favSeasonInput);

请勿将代码作为图像粘贴到此处请将代码粘贴到此处,并解释您收到的错误您的现有代码有什么问题?
isSeason = seasonScores.keySet().containsKey(favSeasonInput);
seasonScore = seasonScores.get(favSeasonInput);