【问题标题】:Java - How to join multiple values in a multidimensional array?Java - 如何在多维数组中连接多个值?
【发布时间】:2016-09-26 03:03:06
【问题描述】:

我是初学者程序员,我陷入了试图了解如何使用数组的兔子洞。我正在尝试使用多维数组创建一个表,并且我正在寻找一个包含 7 行和 5 列的表。

  • 第 1 列 = 将从用户输入中获取值。此输入存储在一个数组中。
  • 第 2 列 = 将打印该数组中的最高输入。
  • 第 3 列 = 将打印该数组中的最低输入
  • 第 4 列 = 将打印增量总计。即当前输入+先前输入。
  • 第 5 列 = 将采用增量平均值。即总计/指数

下面的完整代码

import java.util.Scanner; 

public class Numbers {
    public static void main(String[] args)
    {
     //----User Input - Add values to array ----//

    Scanner keyboard = new Scanner(System.in); 

    int places = 7; 
    int [] values = new int [places];
    int sum = 0; 

    System.out.println("Enter a Numbers:");

        for (int count = 0; count < places; count++)
            {       
            values[count] = keyboard.nextInt();
            System.out.println(values[count]);
            }

     //----------------Total---------------------//

        for (int numb : values)
            {
            sum = sum + numb;
            }

        System.out.println("\n Total:" +  sum);

   //----------Average------------------------/

        double avg = 0; 
        if (values.length > 0)
            {
            avg = sum / values.length;
            }

        System.out.printf("\n Average:"+ avg);


   //---------Table Start---------------------//


        int [] [] table = new int [7][5];

        for (int row =0; row < 7; row++)
            for (int column = 0; column < 5; column++)
            table [row][column] = getTable(column, column, column, column, avg);


        System.out.println("\n\nIndex\tInput\tHigest\tLowest\tTotal\tAverage"); 

        for (int row = 0; row < 7; row++)
            {
            System.out.print((row + 1) +  " "); 
            for (int column = 0; column < 5; column++)
                System.out.print("\t  " + table[row][column] + " "); 
            System.out.println(); 
            }

        }

public static int getTable(int input, int highest, int lowest, int total, double average) {

/* TO DO: 
     * - add each user input from values array into Input column
     * 
     * - add highest/lowest values in the Highest/Lowest column
     * 
     * - add each of the array element total in Total column - this column should take previous Total plus current total. 
     *          i.e Total = Total + Input
     * 
     * - add Average - Current average value. 
     */

    return 0;

    }
}

我不知道如何让我的代码每次使用不同的值填充每一行。

例如:

索引 1

  • 第一列取值数组的第一个值
  • 第二列:取值数组中的最大值
  • 第三列:取值数组的最小值
  • 第四列:取值数组的前一个元素加上当前值
  • 第 5 列:取总数/索引

我知道可能需要创建一个方法来让我的程序循环,但我只是不知道该怎么做。我尝试了几种不同的方法,但我只是感到困惑。在下面屏幕截图的左角,是列的外观。注意它们是如何返回 0 的,我知道这是来自我创建的 getTable 方法,它就是这样做的。

【问题讨论】:

    标签: java arrays multidimensional-array


    【解决方案1】:

    基本上,在这段代码中,您将遍历所有列:

        for (int row =0; row < 7; row++)
            for (int column = 0; column < 5; column++)
            table [row][column] = getTable(column, column, column, column, avg);
    

    你不想这样做。如果您对每一列执行几乎相同的操作,那么循环遍历所有列将是有意义的。但你不是。您希望每一列都有非常不同的计算结果。所以说类似的话会更有意义

        for (int row = 0; row < table.length; row++) {
            table[row][0] = getFirstValue(values);
            table[row][1] = getHighestValue(values);
            table[row][2] = getLowestValue(values);
            ...
    

    等等。 (但是,我真的不明白应该如何使用“值”。您正在输入一组值,但是您正在根据该一组值创建一个包含 7 行的表。也许还有更多的东西你的代码有问题。)

    注意几件事:(1) 我在循环中用table.length 替换了7table.length 是行数,将是 7。但是如果您更改内容以使用不同的行数,那么使用 table.length 意味着您不必更改 for 循环。 (2) 我的代码将values 作为参数传递给不同的方法,这是必要的,因为这些方法将对输入值进行计算。您的代码没有将values 传递给getTable(),因此getTable() 无法执行任何计算,因为它没有数据。

    代码可以进一步改进。一种方法是在类中定义常量,例如

    private static final int FIRST_VALUE_COLUMN = 0;
    private static final int HIGHEST_VALUE_COLUMN = 1;
    
    ...
    
            table[row][FIRST_VALUE_COLUMN] = getFirstValue(values);
            table[row][HIGHEST_VALUE_COLUMN] = getHighestValue(values);
    

    这样更易读。

    更显着的改进是根本不使用二维数组。由于您有五个具有不同含义的值,因此 Java 中的常规方法是创建一个具有五个实​​例变量的类来保存计算数据:

    public class ComputedData {
        private int firstValue;
        private int highestValue;
        private int lowestValue;
    
        public void setFirstValue(int firstValue) {
            this.firstValue = firstValue;
        }
    
        public int getFirstValue() {
             return firstValue;
        }
    
        // similarly for other fields
    }
    

    table 将是ComputedData 的一维数组。

    这更好,因为现在您不必将无意义的列号分配给不同的计算值。相反,名称会告诉您每个计算值是什么。此外,这意味着您可以稍后添加不必为int 的新值。对于数组,数组中的所有元素都必须是相同的类型(您可以使用Object,它可以保存任何类型的值,但这会使代码更加混乱)。事实上,您稍后可能会决定“平均值”应该是 double 而不是 int,因为整数的平均值并不总是整数。您可以通过更改ComputedData 类中的实例变量的类型来轻松进行此更改。但是,如果使用数组,这种更改会变得相当复杂。

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-09
      相关资源
      最近更新 更多