Java требует значения часового из двух отдельных входов - PullRequest
0 голосов
/ 20 октября 2019

Я только что натолкнулся на контролируемую дозу итерацию, и у меня возникли некоторые трудности. Я должен сделать программу, которая получает пробег и галлоны, используемые от пользователя, рассчитывает общую миль на галлон. Я пытаюсь использовать -1 в качестве значения часового, чтобы выйти из цикла, когда пользователь закончил, но когда я иду, чтобы ввести значение, Java не завершает программу. Вместо этого он запрашивает другое значение от галлонов. Как заставить его принять значение часового с первого ввода?

Пример:

Введите мили или -1 для выхода

-1

Введите галлоны

-1

Завершить

import java.util.Scanner;

public class Activity3_17 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        // processing phase
        int miles = 1;
        int gallons = 1;
        int totalMiles = 0;
        int totalGallons = 0;
        float mpg = 0;


        System.out.println("Enter miles or -1 to exit");
        miles = input.nextInt();

        System.out.println("Enter gallons");
        gallons = input.nextInt();

        while (miles != -1) {
            System.out.println("Enter miles or -1 to exit");
            miles = input.nextInt();

            System.out.println("Enter gallons or -1 to exit");
            gallons = input.nextInt();

            totalMiles = totalMiles + miles;
            totalGallons = totalGallons + gallons;


        }
        if (miles == -1) {
            System.out.print("Terminate");
        }
        else{
            mpg = (float) totalMiles / totalGallons;
            System.out.println(mpg);
            }

    }
}

Ответы [ 4 ]

0 голосов
/ 20 октября 2019

Спасибо всем за помощь. Вот готовый и рабочий код:

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    int miles = 0;
    int gallons = 0;
    int totalMiles = 0;
    int totalGallon = 0;
    double mpg = 0;
    double totalMpg = 0;

    while(miles != -1){
        System.out.println("Enter mileage or -1 to exit: ");
        miles = input.nextInt();
        if(miles == -1){
            break;
        }
        System.out.println("Enter gallons or -1 to exit: ");
        gallons = input.nextInt();
        mpg = (double) miles / gallons;
        System.out.printf("MPG: %.4f%n", mpg);
        if(gallons == -1){
            break;
        }
        totalMiles = totalMiles + miles;
        totalGallon = totalGallon + gallons;

    }
    if (miles == -1){
        totalMpg = (double) totalMiles / totalGallon;
        System.out.printf("Total used is %.4f%n", totalMpg);
    }


}
0 голосов
/ 20 октября 2019

Просто добавьте 2 дополнительных условия в цикл while (если с перерывом) для немедленного выхода из while

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);
    // processing phase
    int miles = 1;
    int gallons = 1;
    int totalMiles = 0;
    int totalGallons = 0;
    float mpg = 0;


    System.out.println("Enter miles or -1 to exit");
    miles = input.nextInt();

    System.out.println("Enter gallons");
    gallons = input.nextInt();

    while (miles != -1) {
        System.out.println("Enter miles or -1 to exit");
        miles = input.nextInt();
        if(miles == -1) break;
        System.out.println("Enter gallons or -1 to exit");
        gallons = input.nextInt();
       if(gallons == -1) break;

        totalMiles = totalMiles + miles;
        totalGallons = totalGallons + gallons;


    }
    if (miles == -1) {
        System.out.print("Terminate");
    }
    else{
        mpg = (float) totalMiles / totalGallons;
        System.out.println(mpg);
        }

}
}

0 голосов
/ 20 октября 2019

Вам необходимо проверить, вводил ли пользователь -1 в цикле while. Если они это сделали, выйдите из цикла, используя break, а затем завершите программу.

mpg все еще печатается внутри цикла, но только после того, как проверка сделана. Это гарантирует, что пользователь дал правильный ввод.

Я решил сделать условие цикла true, поскольку цикл должен прерваться, если miles или gallons равно -1.

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    int miles = 1;
    int gallons = 1;
    int totalMiles = 0;
    int totalGallons = 0;
    float mpg = 0;

    while (true) {
        System.out.println("Enter miles or -1 to exit");
        miles = input.nextInt();
        if (miles == -1) break;

        System.out.println("Enter gallons or -1 to exit");
        gallons = input.nextInt();
        if (gallons == -1) break;

        totalMiles = totalMiles + miles;
        totalGallons = totalGallons + gallons;
        mpg = (float) totalMiles / totalGallons;

        System.out.println(mpg);
    }
    input.close();
    System.out.print("Terminate");
}
0 голосов
/ 20 октября 2019

Java только оценивает цикл while каждый раз, когда завершается. Поэтому вам нужно будет вручную проверить, был ли miles равен -1, и разорвать цикл.

while (miles != -1) {
    System.out.println("Enter miles or -1 to exit");
    miles = input.nextInt();

    if (miles == -1) break;         

    System.out.println("Enter gallons or -1 to exit");
    gallons = input.nextInt();

    totalMiles = totalMiles + miles;
    totalGallons = totalGallons + gallons;
}
...