Разбор строки для логического в Java - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть следующая простая программа продаж, и у меня возникают проблемы при создании цикла перезапуска вокруг программы. Моя основная проблема заключается в преобразовании логического значения из строки в логический тип. В Eclipse я получаю сообщение об ошибке: «Метод parseBoolean (String) не определен для типа Boolean».

Однако в верхней части я определил логическую переменную, логическое значение tryAgain = false;

и по какой-то причине я не могу настроить сканер пользовательского ввода на принятие значения True или False без ошибки. Ошибка происходит с последней строкой, когда я пытаюсь привести следующую строку от пользователя к логическому значению.

import java.util.Scanner;
public class Sales {
    public static void main(String args[]) {

        String item1, item2, item3;                 //Three vars for items
        double price1, price2, price3;              //Three vars for price
        int quantity1, quantity2, quantity3;        //Three vars for quantity
        Scanner userInput = new Scanner(System.in); //Creates scanner for user input
        double sum;                                 //var for total before tax
        double tax;                                 //var for tax
        double total;                               //var for total with tax
        double tax_total;                           //var to calculate tax
        boolean tryAgain = true;                    //boolean for try again loop to restart program

        // First set of inputs

        while (tryAgain) {

            System.out.println("Please enter the first item: ");
            item1 = userInput.nextLine();
            System.out.println("Please enter the price of the first item: ");
            price1 = userInput.nextDouble();
            System.out.println("Please enter the quantity purchased: ");
            quantity1 = userInput.nextInt();

            // Second set of inputs

            System.out.println("Please enter the second item: ");
            item2 = userInput.next(); 
            System.out.println("Please enter the price of the second item: ");
            price2 = userInput.nextDouble();
            System.out.println("Please enter the quantity purchased: ");
            quantity2 = userInput.nextInt();

            // Third set of inputs

            System.out.println("Please enter the third item: ");
            item3 = userInput.next(); //skipping over item 2.  Why?
            System.out.println("Please enter the price of the third item: ");
            price3 = userInput.nextDouble();
            System.out.println("Please enter the quantity purchased: ");
            quantity3 = userInput.nextInt();

            System.out.println("Please enter the sales tax rate: ");            //Prompt user for tax rate
            tax = userInput.nextDouble();

            //Print line item totals

            System.out.println("Line item totals");
            System.out.println("____________________");
            System.out.println("Item 1: " + item1 + "\t" + "$" + price1);
            System.out.println("Item 2: " + item2 + "\t" + "$" + price2);
            System.out.println("Item 3: " + item3 + "\t" + "$" + price3);
            System.out.println();

            //Process final output for display

            sum = price1 + price2 + price3;
            total = (sum * tax) + sum;
            tax_total = tax * sum;
            System.out.println("Total cost(no tax):\t" + "$" + sum);                    //display total cost witout tax
            System.out.println("Total tax(" + tax + " rate): \t" + "$" + tax_total);    //display total tax
            System.out.println("Total cost(with tax):\t" + "$" + total);                //display total with tax
            System.out.println();
            System.out.println("Program created by James Bellamy");

            System.out.println("Do you want to run the program again? (True or False)");

            tryAgain = Boolean.parseBoolean(userInput.nextLine());

        }




    }

}

Ответы [ 3 ]

0 голосов
/ 05 сентября 2018

Ну, по какой-то причине я не смог заставить его работать с логическим значением, поэтому я переключился на цикл do while. Вот окончательный код. Также я использовал подсказку для очистки nextLine ().

import java.util.Scanner;
public class Sales2 {
    public static void main(String args[]) {

        String item1, item2, item3;                 //Three vars for items
        double price1, price2, price3;              //Three vars for price
        int quantity1, quantity2, quantity3;        //Three vars for quantity
        Scanner userInput = new Scanner(System.in); //Creates scanner for user inputjea
        double sum;                                 //var for total before tax
        double tax;                                 //var for tax
        double total;                               //var for total with tax
        double tax_total;                           //var to calculate tax
        boolean tryAgain = true;                    //boolean for try again loop to restart program

        // First set of inputs

        String answer;                              //Define var type of String for do while loop to restart program
        do {                                        //Do this loop while string == (last line of code while loop)

            System.out.println("Please enter the first item: ");
            item1 = userInput.nextLine();
            System.out.println("Please enter the price of the first item: ");
            price1 = userInput.nextDouble();
            System.out.println("Please enter the quantity purchased: ");
            quantity1 = userInput.nextInt();

            // Second set of inputs

            System.out.println("Please enter the second item: ");
            item2 = userInput.next(); 
            System.out.println("Please enter the price of the second item: ");
            price2 = userInput.nextDouble();
            System.out.println("Please enter the quantity purchased: ");
            quantity2 = userInput.nextInt();

            // Third set of inputs

            System.out.println("Please enter the third item: ");
            item3 = userInput.next(); //skipping over item 2.  Why?
            System.out.println("Please enter the price of the third item: ");
            price3 = userInput.nextDouble();
            System.out.println("Please enter the quantity purchased: ");
            quantity3 = userInput.nextInt();

            System.out.println("Please enter the sales tax rate: ");            //Prompt user for tax rate
            tax = userInput.nextDouble();

            //Print line item totals

            System.out.println("Line item totals");
            System.out.println("____________________");
            System.out.println("Item 1: " + item1 + "\t" + "$" + price1);
            System.out.println("Item 2: " + item2 + "\t" + "$" + price2);
            System.out.println("Item 3: " + item3 + "\t" + "$" + price3);
            System.out.println();

            //Process final output for display

            sum = price1 + price2 + price3;
            total = (sum * tax) + sum;
            tax_total = tax * sum;
            System.out.println("Total cost(no tax):\t" + "$" + sum);                    //display total cost witout tax
            System.out.println("Total tax(" + tax + " rate): \t" + "$" + tax_total);    //display total tax
            System.out.println("Total cost(with tax):\t" + "$" + total);                //display total with tax
            System.out.println();
            System.out.println("Program created by James Bellamy");

            System.out.println("Do you want to run the program again? (yes or no)");    //Prompt user for restart
            userInput.nextLine();                                                       //Clear scanner 
            answer = userInput.nextLine();

        }
        while (answer.equalsIgnoreCase("Yes"));                                         //Connected to do while loop
                                                                                        //




    }

}
0 голосов
/ 05 сентября 2018

Scanner поддерживает nextBoolean(). Просто используйте это:

tryAgain = userInput.nextBoolean()
0 голосов
/ 05 сентября 2018

Причина, по которой это доставляет вам неприятности, заключается в том, что когда пользователь вводит двойное число, а затем нажимает клавишу ввода, только что были введены две вещи - двойное и новая строка, \ n.

Метод, который вы вызываете, "nextDouble ()", читает только в double, что оставляет новую строку во входном потоке. Но вызов nextLine () действительно читает в новых строках, поэтому вам нужно вызвать nextLine (), прежде чем ваш код заработает.

Добавьте эту строку перед последней строкой.

userInput.nextLine();
...