Есть ли способ остановить входную петлю сканера после того, как условие выполнено? - PullRequest
0 голосов
/ 03 ноября 2019

Я пытаюсь разрешить пользователю выбирать только данные ввода. Если они выберут что-то отличное от "f", "F", "c" или "C" для первого optionGate, им будет предложено повторить попытку и вернуться к сканеру. Это та же самая ситуация для следующих ворот: optionGate2.

Ворота достигают того, чего я от них хотел, не давая пользователю вводить ввод, отличный от заданных опций. Моя проблема возникает, когда оба логических значения обращены к true и пропущены ворота. Сканер по какой-то причине все еще запрашивает пользовательский ввод в бесконечном цикле. Затем я могу снова и снова набирать что-либо в сканере, и программа больше не запускается.

Любые предложения или комментарии о том, что происходит?

Scanner in = new Scanner(System.in);
boolean optionGate = false;
boolean optionGate2 = false;

String tempLabel = "";    //initialize to F
String precipLabel = ""; //initialize to in

while(optionGate != true){
    System.out.println("Choose the temperature scale (F = Fahrenheit, C = Celsius:)");
    String scaleT = in.nextLine();

    if("f".equalsIgnoreCase(scaleT)){
        tempLabel = "F";
        optionGate = true;
    }
    else if("c".equalsIgnoreCase(scaleT)){
        tempLabel = "C";
        optionGate = true;
    }
    else{
        System.out.println("Error: not an option. Try again:");
        optionGate = false;
    }
}

while(optionGate2 != true){
    System.out.println("Choose the precipitation scale (i = inches, c = centimeters:)");
    String scaleP = in.nextLine();

    if("i".equalsIgnoreCase(scaleP)){
        precipLabel = "in";
        optionGate2 = true;
    }
    else if("c".equalsIgnoreCase(scaleP)){
        precipLabel = "cm";
        optionGate2 = true;
    }
    else{
        System.out.println("Error: not an option. Try again:");
        optionGate2 = false;
    }
}

РЕДАКТИРОВАТЬ: Добавление кода, следующего за приведенным выше фрагментом. (Извините за очевидное отсутствие ноу-хау stackoverflow. Это мой первый пост на платформе).

String [] month = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
        double [] temperature ={60.9, 62.6, 67.4, 71.5, 77.1, 81.2, 82.4, 82.5, 81.1, 75.3, 68.8, 63.0};     //initialize with Fahrenheit values
        double [] precipitation ={2.4, 2.4, 3.5, 2.4, 3.7, 7.4, 7.2, 6.3, 5.8, 2.7, 2.3, 2.3};      //initialize with inch values

        double[] updatedTemperature;
        updatedTemperature = new double[temperature.length];

        double[] updatedPrecipitation;
        updatedPrecipitation = new double[precipitation.length];


        while("f".equalsIgnoreCase(tempLabel)){
            for(int i = 0 ; i < temperature.length ; i++) {
            updatedTemperature[i] = temperature[i];
        }

             if("in".equals(precipLabel)){
            for(int i = 0 ; i < precipitation.length ; i++){
            updatedPrecipitation[i] = precipitation[i];    
            }

        }
        else if("cm".equals(precipLabel)){
            for(int i = 0 ; i < precipitation.length ; i++){
            updatedPrecipitation[i] = (precipitation[i] * 2.54);    
            }

        }
       }

        while("c".equalsIgnoreCase(tempLabel)){
           for(int i = 0 ; i < temperature.length ; i++) {
            updatedTemperature[i] = ((temperature[i] - 32) * (5.0/9));
        }


             if("in".equals(precipLabel)){
            for(int i = 0 ; i < precipitation.length ; i++){
            updatedPrecipitation[i] = precipitation[i];    
            }   

        }
        else if("cm".equals(precipLabel)){
            for(int i = 0 ; i < precipitation.length ; i++){
            updatedPrecipitation[i] = (precipitation[i] * 2.54);    
            }

        }
        }




        //Processing - calculate average temperature and total precipitation
        for( int index = 0; index < updatedTemperature.length; index++)
        {
            sum += updatedTemperature[index];
        }
        avg = sum/updatedTemperature.length;

РЕДАКТИРОВАТЬ: Вот весь код внутри моего основного метода:


        //Declare and initialize variables
        Scanner in = new Scanner(System.in);
        String city = "Orlando";
        String state = "FL";
        double sum = 0;
        double avg = 0;
        boolean optionGate = false;
        boolean optionGate2 = false;

        String tempLabel = "";    //initialize to F
        String precipLabel = ""; //initialize to in

        while(optionGate != true){
        System.out.println("Choose the temperature scale (F = Fahrenheit, C = Celsius:)");
        String scaleT = in.nextLine();

        if("f".equalsIgnoreCase(scaleT)){
            tempLabel = "F";
            optionGate = true;
        }
        else if("c".equalsIgnoreCase(scaleT)){
            tempLabel = "C";
            optionGate = true;
        }
        else{
            System.out.println("Error: not an option. Try again:");
            optionGate = false;
        }
        }

        while(optionGate2 != true){
        System.out.println("Choose the precipitation scale (i = inches, c = centimeters:)"); 
        String scaleP = in.nextLine();

        if("i".equalsIgnoreCase(scaleP)){
            precipLabel = "in";
            optionGate2 = true;
        }
        else if("c".equalsIgnoreCase(scaleP)){
            precipLabel = "cm";
            optionGate2 = true;
            in.close();
        }
        else{
            System.out.println("Error: not an option. Try again:");
            optionGate2 = false;
        }
        }




        String [] month = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
        double [] temperature ={60.9, 62.6, 67.4, 71.5, 77.1, 81.2, 82.4, 82.5, 81.1, 75.3, 68.8, 63.0};     //initialize with Fahrenheit values
        double [] precipitation ={2.4, 2.4, 3.5, 2.4, 3.7, 7.4, 7.2, 6.3, 5.8, 2.7, 2.3, 2.3};      //initialize with inch values

        double[] updatedTemperature;
        updatedTemperature = new double[temperature.length];

        double[] updatedPrecipitation;
        updatedPrecipitation = new double[precipitation.length];


        while("f".equalsIgnoreCase(tempLabel)){
            for(int i = 0 ; i < temperature.length ; i++) {
            updatedTemperature[i] = temperature[i];
        }

             if("in".equals(precipLabel)){
            for(int i = 0 ; i < precipitation.length ; i++){
            updatedPrecipitation[i] = precipitation[i];    
            }

        }
        else if("cm".equals(precipLabel)){
            for(int i = 0 ; i < precipitation.length ; i++){
            updatedPrecipitation[i] = (precipitation[i] * 2.54);    
            }

        }
       }

        while("c".equalsIgnoreCase(tempLabel)){
           for(int i = 0 ; i < temperature.length ; i++) {
            updatedTemperature[i] = ((temperature[i] - 32) * (5.0/9));
        }


             if("in".equals(precipLabel)){
            for(int i = 0 ; i < precipitation.length ; i++){
            updatedPrecipitation[i] = precipitation[i];    
            }   

        }
        else if("cm".equals(precipLabel)){
            for(int i = 0 ; i < precipitation.length ; i++){
            updatedPrecipitation[i] = (precipitation[i] * 2.54);    
            }

        }
        }




        //Processing - calculate average temperature and total precipitation
        for( int index = 0; index < updatedTemperature.length; index++)
        {
            sum += updatedTemperature[index];
        }
        avg = sum/updatedTemperature.length;

        //Output: display table of weather data including average and total
        System.out.println();
        System.out.println("           Weather Data");
        System.out.println("      Location: " + city +", " + state);
        System.out.println("Month     Temperature (" +  tempLabel + ")     Precipitation (" + precipLabel + ")");
        System.out.println();
        System.out.println("***************************************************");
        for( int index = 0; index < temperature.length; index++)
        {
            System.out.println(month[index] + "\t   " + updatedTemperature[index] + "\t\t       " + updatedPrecipitation[index]);
        }
        System.out.println("***************************************************");
        System.out.println("Average: " + avg + "    Total: " + sum);

1 Ответ

0 голосов
/ 03 ноября 2019

Ваш код входит в цикл в строках

while("c".equalsIgnoreCase(tempLabel)){

while("f".equalsIgnoreCase(tempLabel)){

и никогда не выходит.

Вы можете изменить while на if конструкцию здесь

...