java - 获取二维数组中的特定用户输入

标签 java arrays multidimensional-array

这是我的作业:

“您的公司有 4 家杂货店。每家商店有 3 个部门,产品展示会影响销售(农产品、肉类、冷冻食品)。商店中的某个部门经常会因工作出色而获得奖金。

您需要创建一个程序,在系统中保存部门奖金表。创建一个程序,其中包含这些奖金的二维数组。商店可以是行,部门可以是列。让程序询问用户三次奖金金额、杂货店编号 (1-4) 和部门编号 (1-3),并根据他们提供的数字将奖金金额添加到数组中的适当位置。完成此操作后,将 4 个商店中每个商店的奖金(二维数组中的 4 行)相加,并将其显示给用户。”

这是我的代码:

import java.util.Scanner;
public 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%n" +
                "stores out of four stores%nand 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]);
            }
        }
    }
}

我的问题:

如何通过提示用户输入商店编号和部门编号来获取用户对二维数组中特定位置的输入(奖金金额)。 然后,我如何打印它?

最佳答案

我认为你的问题并不是要求 3 个输入。每个字段要求 3 个输入。因此,我相信您希望通过要求用户提供 3 次奖金、商店和部门的详细信息来填充 4x3 数组。然后默认填写第4个商店。

就我个人而言,我建议用户先输入奖金,然后创建二维数组。另外,如果您想变得更花哨(也许您不在乎哈哈),您可以更改 while 语句以捕获任何错误的条目。现在,如果有人输入字符串、 float 等,它将返回异常。值得庆幸的是,这很容易修复

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 个商店的指定奖励值。鉴于没有指定可以计算该值的模式,我不太确定第四家商店的用途。如果是我,我会寻求对此的澄清,但我们也可以假设其他值用 0 填充。如果是这种情况,则数组现在已全部设置完毕,因为数组初始化为默认值 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);
}

从技术上讲,您可以将其放入上面的循环中并立即执行所有操作,因为它使用相同的参数,但我发现这有点笨拙且难以个人阅读。希望有帮助!

关于java - 获取二维数组中的特定用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60941513/

相关文章:

java - 我们可以在 HQL 中将 to_char( ) 与 GROUP BY 一起使用吗

java - 如何在 Ubuntu Linux 中使用 JVisualvm 监控 Tomcat6?

java - JTable GUI 更新后如何获得事件?

arrays - 如何在swift中将字典追加到数组中

php - 为什么多维数组一直返回键值 "0"?

c# - 将二维数组的二维数组转换为单个二维数组

java - H2数据库备份恢复序列已存在异常

PHP - 获取数组值的键名

Java列表比较导致错误我无法确定

c++ - 使用 blitz++ 声明 3d 数组