Получение Specifi c пользовательского ввода в двумерных массивах - PullRequest
0 голосов
/ 31 марта 2020

Вот мое задание:

"В вашей компании есть 4 продуктовых магазина. В каждом магазине есть 3 отдела, в которых представление продукции влияет на продажи (продукты, мясо, замороженные). Время от времени это отдел в магазине получает бонус за действительно хорошую работу.

Вам необходимо создать программу, которая хранит таблицу бонусов в системе для отделов. Создайте программу, имеющую двумерный массив для этих бонусов. Магазины могут быть строками, а отделы - колонками. Попросите программу трижды запросить у пользователя сумму бонуса, номер продуктового магазина (1-4) и номер отдела (1-3) и добавить сумму бонуса к соответствующее место в массиве, основанное на числах, которые они дали. После того, как это сделано, сложите бонусы для каждого из 4 магазинов [4 строки в вашем 2-мерном массиве] и отобразите их для пользователя. "

Вот мой код:

import java .util.Scanner; publi c class Main {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    Scanner in = new Scanner(System.in);

    double table [][] = new double[4][3];

    System.out.printf("Please enter a bonus amount for three%nstores out of four stores%n"
            + "and each of their three departmanets.%n%nThese departments include:%n"
            + "Produce%nMeat%nFrozen%n%n");

    for (int i = 1; i<=3; i++){
        System.out.printf("Please enter the store number (1-4)%n");
        int a = in.nextInt();
        while (a>4 || a<1){
            System.out.printf("Please enter a number 1-4%n");
            a = in.nextInt();
        }
        System.out.printf("%nPlease enter the department number:%n");
        int b = in.nextInt();
        while (b>3 || b<1){
            System.out.printf("Please enter a number 1-3%n");
            b = in.nextInt();
        }

        int c = a-1;
        int d = b-1;
        System.out.printf("%nPlease enter bonus amount:%n");
        double price = in.nextDouble(); 
        table[c][d] = price;
    }

    for (int j = 0; j <= table.length; j++){
        for (int k = 0; k <= table[j].length; k++){
            System.out.printf("%d ", table[j][k]);
        }
    }

}

Мой вопрос:

Как получить ввод пользователя (сумму бонуса) на указанное c место в двумерном массиве, просто предложив пользователю ввести номер магазина и номер отдела. А потом, как мне распечатать его после?

Спасибо

1 Ответ

1 голос
/ 31 марта 2020

Я думаю, что ваш вопрос не требует 3 входов. Требуется 3 входа на каждое поле. Поэтому я полагаю, что вы хотите заполнить массив 4х3, попросив пользователя предоставить сведения о бонусе, магазине и отделе 3 раза. Затем четвертое хранилище заполняется по умолчанию.

Лично я бы предложил, чтобы пользователь ввел бонус 1-й, а затем создал 2-мерный массив. Кроме того, если вы хотите стать модным (может быть, вам все равно, ха-ха), вы можете изменить свое выражение while, чтобы поймать любую неудачную запись. Прямо сейчас, если кто-то введет строку, float и т. Д. c, он вернет исключение. К счастью, это довольно легко исправить, хотя

Scanner in = new Scanner(System.in);
//Better to cache dimensions in an array so it's more easily modifiable
int stores = 4;
int depts = 3;
double table [][] = new double[stores][depts];

//Create an array to hold user inputs
int inputs[][] = new int[stores][depts];

//Use a for loop to populate table
for (int i = 1, i <= stores; i ++) {
    System.out.println("Enter the bonus here.");
    double bonus = in.nextDouble;
    //While loop to catch mischievous input
    while(!bonus.hasNextDouble) || bonus <=0) {
         System.out.println("Invalid input :/");
         double bonus = in.nextDouble();
    }

    System.out.println("Enter store number here.");
    int a = in.nextInt();
    while (!a.hasNextInt || a>4 || a<1) {
        System.out.println("Stop trying to break my code!");
        int a = in.nextInt();
     }

     System.out.println("Enter dept number here.")
     int b = in.nextInt();
     //Same while loop with b :)

     table[a-1][b-1] = bonus;
     inputs[i-1][i-1] = {{a},{b}}
     //You could catch this with a while loop too using if (!inputs[a][b] = 0)     }

Выполнение вышеизложенного заполняет массив точно в запрошенной позиции указанным бонусным значением для 3 магазинов. Я не совсем уверен, что предназначено для 4-го магазина, учитывая, что не указан шаблон, где можно было бы рассчитать значение. Если бы это был я, я бы попросил прояснить это, но в качестве альтернативы мы можем предположить, что другие значения заполняются нулями. Если это так, то массив теперь полностью установлен, так как массивы инициализируются значением по умолчанию, равным 0. Так что теперь вам просто нужно суммировать строки и распечатать их.

for(int i = 1; i <= stores; i++) {
     int sum = 0;
     for(int j = 1; j<= stores; j++) {
          sum += table[i][j];
      }
      System.out.println("Total store bonus for store " + i + ": " + sum);   
 }

Вы можете технически поставить что в приведенном выше l oop и сделать все сразу, поскольку он использует те же параметры, но я считаю, что это немного неуклюже и трудно читать лично. Надеюсь, это поможет!

...