Как закрыть время l oop с помощью пользовательского ввода для двойников - PullRequest
0 голосов
/ 18 июня 2020

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

Я пытаюсь получить пользовательский ввод до 52 раз, сложить их все вместе, а затем усреднить сумму.

Я создал этот метод, чтобы позволить пользователю вводить свою еженедельную прибыль на основе ввода переменной «Продажи» далее в коде. Я думал, что предел в 52 будет хорошим, поскольку он позволит человеку в среднем 2 недели, месяц, 6 месяцев и т. Д. c, например, если он пытается составить бюджет или найти приблизительный годовой доход.

    //new method
    public static void computeAverageSalesProfit() {       

        //new scanner object in method
        Scanner input = new Scanner(System.in);

        //new object
        Sales AvgProfit = new Sales();

        //prompt for input
        System.out.println("Please enter weekly profits, up to 52 weeks.  When finished, enter '-1.'");       

        //value to store input, and test against
        double value = 0;
        //new double array to sum together and average out
        double[] sum2 = new double[52];

        //while loop of doom
        while(value >= 0) {

        for (int i=0; i<sum2.length; i++) {
        value = input.nextDouble();
        sum2[i] = value + 0;

        }
        }

        double WeeklyProfits = 0;
        for (int i=0; i<sum2.length; i++) {
            WeeklyProfits = sum2[i] / sum2.length;
        }

        AvgProfit.setWeeklyProfits(WeeklyProfits);

        System.out.printf("Your average profits are %.2f", AvgProfit.getWeeklyProfits());

    }

Это код, которым я закончил на ночь, и я не могу понять, как закончить while l oop. Первоначально у меня не было переменной value, но я подумал, что проверка ее перед итерацией sum2 позволит мне закрыть ее. Когда я запускаю программу, она принимает вводимые пользователем данные, но никогда не заканчивается, пока я не достигну 52 итераций. Я также пробовал использовать «0000» в логическом выражении, но это тоже не сработало.

Я также пробовал не устанавливать переменную значения, я пробовал все, что мог придумать, и могу найти на инте rnet. Я пробовал использовать переменную значения и без нее, используя простой двойной (а не массив). Я даже пробовал использовать String, используя логическое выражение (good = true / false, while (! / Good), et c, но мне не удалось преобразовать его в двойное и усреднить.

I Я полностью сбит с толку, и у меня болит голова. Я буду очень признателен за любую помощь или идеи, которыми вы можете поделиться. Спасибо.

О, и у меня есть время oop в другой части мой код действительно работает, но я не думаю, что этот работает так же. Думаю, я либо слишком много обдумываю его, либо просто упускаю что-то очень очевидное.

//Check Year length separate, keeping original code mostly intact
    public static boolean isValid(String input)
    {
        //Does it have 4 digits?
        if(input.length() != 4)
            return false;

    // Is it a number ?
        try
        {
            Integer i = Integer.parseInt(input);
        }
        catch(NumberFormatException e)
        {
            return false;
        }

        // Passed all checks and is valid
        return true;
    }    

1 Ответ

1 голос
/ 18 июня 2020

Одна вещь, которую вы могли бы сделать, это вместо использования while l oop использовать for l oop следующим образом:

//value to store input, and test against
double value = 0;
//new double array to sum together and average out
double[] sum2 = new double[52];

// repeats 52 times max
for (int i=0; i<sum2.length; i++) {
    value = input.nextDouble();

    // Checking if the user entered a negative number
    if (value < 0) {
        // The break keyword exits a loop
        break;
    }

    sum2[i] = value + 0;
}
...