Программа запускается, но второй цикл заканчивается независимо от ввода - PullRequest
0 голосов
/ 08 мая 2019

Я действительно новичок в Java, и у меня возникают проблемы с поиском того, что я сделал не так. Эта программа состоит в том, чтобы запросить суммы продаж, а затем получить среднее значение независимо от количества продаж, эта часть, кажется, работает нормально. Проблема, когда он запрашивает стоимость доставки, он принимает первый ввод, но независимо от того, отвечаете ли вы y или n, он заканчивается, и программа заканчивается, я просто упустил что-то действительно очевидное здесь? (также я попытался посмотреть, как другие люди сделали его более читабельным, и мне жаль, я не знаю, что я делаю, извините.)

попытался изменить его, но потом он просто допустил ошибки, я не знал, как решить себя, поскольку я новичок, и это моя первая попытка изучения Java, моя школа требует от нас использовать NetBeans (10.0 в моем случае)

import java.util.*;

public class JavaApplication3
{   //these ones are the attributes.      private String Sales1,2,3;
    public static boolean b_repeat = true;
    private double Sales1;
    private double Sales2;
    private double Sales3;

    //this is a constructor of 2 parameters for Cales class.
    public JavaApplication3(double Sales1, double Sales2, double Sales3)
    {
        this.Sales1 = Sales1;
        this.Sales2 = Sales2;
        this.Sales3 = Sales3;
    }

    public static void main(String args[])
    {
        double avg = computeAverageSales();
        System.out.println(" Average of Sales :" + avg);
        if (avg > 200) {
            System.out.println(" Product has produced a significant amount of revenue!");
        }
        double chr = computeShippingCharges();
        System.out.println(" Total shipping charge :" + chr);
    }

    public static double computeAverageSales()
    {
        double avgSales, salesIn, total = 0;
        int cnt = 0;
        Scanner sc = new Scanner(System.in);
        do {
            System.out.println("Input Sales");
            double sales = sc.nextDouble();
            total = total + sales;
            cnt++;
            System.out.println("Would you like to keep adding Sales? (y/n)");

            String repeatLoop = sc.next();
            if (repeatLoop.toLowerCase().equals("n"))
                b_repeat = false;
        } while (b_repeat);

        System.out.println(); //Space seperator
        avgSales = total / cnt;
        return (avgSales);
    }

    public static double computeShippingCharges()
    {
        double avgShipping, shippingIn, total = 0;
        int cnt = 0;
        Scanner sc = new Scanner(System.in);
        do {
            System.out.println("Input Shipping cost");
            double shipping = sc.nextDouble();
            total = total + shipping;
            cnt++;
            System.out.println("Would you like to keep adding Shipping costs? (y/n)");

            String repeatLoop = sc.next();
            if (repeatLoop.toLowerCase().equals("n"))
                b_repeat = false;
        } while (b_repeat);

        System.out.println(); //Space seperator
        avgShipping = total;
        return (avgShipping);

    }

    public double getSales1()
    {
        return this.Sales1;
    }

    public void setSales1(double sales)
    {
        this.Sales1 = sales;
    }

    public double getSales2()
    {
        return this.Sales2;
    }

    public void setSales2(double sales)
    {
        this.Sales2 = sales;
    }

    public double getSales3()
    {
        return this.Sales3;
    }

    public void setSales3(double sales)
    {
        this.Sales3 = sales;
    }
}

он должен принимать любое количество входных данных о продажах или доставке, но доставка будет разрешать только один ввод, независимо от того, что вы ответите на

System.out.println («Хотели бы вы продолжать добавлять стоимость доставки? (Да / нет)»);

с, так что это моя проблема

1 Ответ

0 голосов
/ 08 мая 2019

Проще говоря, переменная b_repeat определяется вне методов, которые ее используют, и каждый раз используется повторно. Таким образом, при первом вызове computeAverageSales или computeShippingCharges он работает правильно, но в следующий раз b_repeat уже имеет значение false при предыдущем вызове. Попробуйте переместить boolean b_repeat = true; в каждую функцию и посмотрите, что произойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...