Java вложенные в то время как циклы не работают должным - PullRequest
0 голосов
/ 26 апреля 2018

У меня проблемы с заданием для класса.Мне нужно иметь возможность распечатать отчет о продажах после ввода определенных данных и подумать, что лучший способ отслеживать все, что нужно было использовать массивы .

Я пытался понять это часами, и я в замешательстве.Любая помощь будет принята.

Для справки пользователю необходимо ввести:

  1. имя сотрудника
  2. год от даты продажи
  3. aномер транзакции
  4. тип транзакции
  5. сумма транзакции

Затем он должен вернуться к номеру транзакции и продолжать этот цикл, пока значение 0 не будет введено в качестве ввода для номера транзакции..

Затем он должен вернуться к имени сотрудника и продолжить этот цикл до тех пор, пока в качестве ввода имени сотрудника не будет введено Done.

Вот код (я думаю, что это единственныйсоответствующая часть, но если вы хотите увидеть весь фрагмент кода, я могу опубликовать его.)

Еще раз спасибо за вашу помощь или предложения!

    void salesData() throws IOException {
    for (int i = 0; i < 100; i++) {
        System.out.print("Enter Name: ");
        n = stdin.readLine();

        if (n.equalsIgnoreCase("done")) {
            break;
        }
        else {
            System.out.print("Enter Transaction Number: ");
            t = Integer.parseInt(stdin.readLine());

            if (t == 0) {
                break;
            }
            else {
                System.out.print("Enter Transaction Type: ");
                tp = stdin.readLine();
                System.out.print("Enter Transaction Amount: ");
                a = Double.parseDouble(stdin.readLine());

                totSales = totSales + a;
                totYtd = totYtd + a;
                empTotal = empTotal + a; 
                empBonus = empBonus + (a * 0.05);

                name[i] = n;
                ytd[i] = y;
                tNum[i] = t;
                type[i] = tp;
                amount[i] = a;

                outputUpdate();

                calcSalesData();
            }
        }

    }
    outputSalesData();
}

Хорошо, так что яЯ работал над этим благодаря помощи ваших парней, и я добился большого прогресса.Все еще есть одна проблема, хотя.Массив сохраняет только номер транзакции, тип и сумму для LAST-транзакции, введенной для каждого сотрудника, а не КАЖДОЙ транзакции.

Я считаю, что ошибка заключается в том, что мне нужно перебрать массивы для tNum, type исумма с другой скоростью, чем у массива name и ytd?

Есть небольшие проблемы, поэтому любая помощь приветствуется ... вот мой обновленный код, а также оператор print в конце.

    void salesData() throws IOException {
    for (int i = 0; i < 100; i++) {
        System.out.print("Enter Name: ");
        n = stdin.readLine();
        if (n.equalsIgnoreCase("done")) {
            outputSalesData();
        }
        System.out.print("Enter Year to Date Sales: ");
        y = Double.parseDouble(stdin.readLine());
        ytdSales = ytdSales + y;
        totYtd = totYtd + ytdSales;
        while (t != 0) {
            System.out.print("Enter Transaction Number: ");
            t = Integer.parseInt(stdin.readLine());

            if (t == 0) {
                t = 1;
                empBonus = 0;
                ytdSales = 0;
                break;
            }
            else {
                System.out.print("Enter Transaction Type: ");
                tp = stdin.readLine();
                System.out.print("Enter Transaction Amount: ");
                a = Double.parseDouble(stdin.readLine());

                totSales = totSales + a;
                totYtd = totYtd + a;
                ytdSales = ytdSales + a;
                empTotal = empTotal + a; 
                empBonus = empBonus + (a * 0.05);

                name[i] = n;
                ytd[i] = y;
                tNum[i] = t;
                type[i] = tp;
                amount[i] = a;

                outputUpdate();

                calcSalesData();
                tCount++;
            }
        }
    }
}

и вот печать:

    void rptOut() {
    System.out.println("");
    System.out.println("--------------------------------------------");
    System.out.println("Employee:\tYTD:\t\tT #:\tType:\tAmount:");
    while (index < tCount)
    {
        System.out.println(name[index] + "\t\t$" + df2.format(ytd[index]) + "\t" + tNum[index] + "\t" + type[index] + "\t$" + amount[index]);
        index++;
    }
    System.out.println("--------------------------------------------");
    System.out.println("Total Food & Soft Drink Sales: \t$" + df2.format(totF));
    System.out.println("Total Alcohol Sales: \t\t$" + df2.format(totA));
    System.out.println("Total Sundries Sales: \t$" + df2.format(totS));
    System.out.println("--------------------------------------------");
    System.out.println("Total Sales for Day: \t$" + df2.format(totSales));
    System.out.println("Total YTD: \t\t$" + df2.format(totYtd));
    System.out.println("--------------------------------------------");
    System.out.println("Highest Trans Amount: \t$" + df2.format(hiTrans));
    System.out.println("Employee w/ Highest Trans: \t" + hiEmp);
    System.out.println("--------------------------------------------");
    //System.exit(0);
}

1 Ответ

0 голосов
/ 26 апреля 2018

Из того, что я могу собрать, вы хотите сохранить значения Отчета о продажах в массивах, где имя Массива, Массив ytd, Тип массива tNum и Массив содержат значения для определенного Отчета о продажах.Теперь, чтобы использовать эту концепцию, вам нужно убедиться, что индекс 0 ссылается на одни и те же данные отчета о продажах во всех ваших зеркальных массивах.

Sales Report 0 = {name[0], ytd[0], tNum[0], type[0]} 
Sales Report 1 = {name[1], ytd[1], tNum[1], type[1]}
etc....

Для этого вы можете использовать один цикл for.Попробуйте следующее

void salesData() throws IOException {
    for (int srIndex = 0; srIndex < 100; srIndex++)
    {
        System.out.print("Enter Name: ");
        n = stdin.readLine();
        name[srIndex] = n;
        System.out.print("Enter Year to Date Sales: ");
        y = Double.parseDouble(stdin.readLine());
        ytd[srIndex] = y;
        totYtd = totYtd + y;
        System.out.print("Enter Transaction Number: ");
        t = Integer.parseInt(stdin.readLine());
        if (t == 0) {
            break;
        } else {
            tNum[srIndex] = t;
        }
        System.out.print("Enter Transaction Type: ");
        tp = stdin.readLine();
        type[srIndex] = tp;
        System.out.print("Enter Transaction Amount: ");
        a = Double.parseDouble(stdin.readLine());
        totSales = totSales + a;
        totYtd = totYtd + a;
        empTotal = empTotal + a;
        empBonus = empBonus + (a * 0.05);

        calcSalesData();
        outputSalesData();
        //ask to enter another sales report
        System.out.print("Do you want to enter another Sales Report? (yes)");
        String userInput = stdin.readLine();
        if(!userInput.equalsIgnoreCase("yes"))
            break;
        }
}

Чтобы очистить код, можно создать метод для получения значения для вас.Таким образом, для значения вашей транзакции вы можете создать такой метод, как

public double getSalesReportTransaction()
{
    System.out.print("Enter Transaction Amount: ");
    return Double.parseDouble(stdin.readLine());
}

. Создание метода для каждого значения в вашем отчете о продажах было бы хорошим способом очистки кода внутри цикла for.

* 1011Наконец, я бы предложил создать класс для вашего отчета о продажах и создать контейнер из этих объектов отчета о продажах.Но я не уверен, сколько вы знаете о классах и не учли его.

Вот ссылка на Java Classes

Для цикла, пока не будет введено 0 дляВ транзакции вы можете сделать следующее в вашем блоке else

    while(true)
    {
        System.out.print("Enter Transaction Number: ");
        t = Integer.parseInt(stdin.readLine());

        if (t == 0) {
            break;
        }
        else {
            System.out.print("Enter Transaction Type: ");
            tp = stdin.readLine();
            System.out.print("Enter Transaction Amount: ");
            a = Double.parseDouble(stdin.readLine());

            totSales = totSales + a;
            totYtd = totYtd + a;
            empTotal = empTotal + a; 
            empBonus = empBonus + (a * 0.05);

            name[i] = n;
            ytd[i] = y;
            tNum[i] = t;
            type[i] = tp;
            amount[i] = a;

            outputUpdate();

            calcSalesData();
        }
    }
...