【问题标题】:How to return values from a populated array in a method to a ragged array in main如何将方法中的填充数组中的值返回到 main 中的参差不齐的数组
【发布时间】:2021-07-30 21:18:20
【问题描述】:

我有一个 main 方法,它创建一个包含 3 行和随机列数的参差不齐的数组。然后将数组传递给名为 Proj09Runner 的类,以从左到右和从上到下的整数计数值填充数组的元素,从 1 开始,以行长度总和的总和结束。

import java.util.Random;
import java.util.Date;
class Proj09{
  public static void main(String[] args){
    
    //Create a pseudo-random number generator
    Random generator = null;
    if(args.length != 0){
      generator = new Random(Long.parseLong(args[0]));
    }else{
      generator = new Random(new Date().getTime());
    };
    
    //Generate some small positive random numbers.
    int[] vals = {Math.abs((byte)generator.nextInt())%5+2,
                  Math.abs((byte)generator.nextInt())%5+2,
                  Math.abs((byte)generator.nextInt())%5+2};

    //Create an empty array object
    Object[][] array = new Object[3][];
    array[0] = new Object[vals[0]];
    array[1] = new Object[vals[1]];
    array[2] = new Object[vals[2]];

    //Instantiate an object from the student's code.
    Proj09Runner obj = new Proj09Runner();
    //Pass a reference to the empty array to the run method
    // of the object instantiated from the student's code
    // where the elements in the array object will be
    // populated with increasing Integer values.
    obj.run(array);

    //Display the data in the populated object.
    for(int i=0;i<3;i++){
      for(int j=0;j<vals[i];j++){
        System.out.print(((Object[])array[i])[j] + " ");
      }//end inner loop
      System.out.println();//new line
    }//end outer loop

    //Print some information that must descibe the
    // populated object.
    System.out.println();//blank line
    System.out.println("Row 0 width = " + vals[0]);
    System.out.println("Row 1 width = " + vals[1]);
    System.out.println("Row 2 width = " + vals[2]);
    System.out.println("Final value = " + (vals[0] + vals[1] + vals[2]));

    System.out.println("That's all folks.");

  }//end main
}//end class Proj09
//End program specifications.

我相信我有正确的代码来填充数组,我只是在将值返回给 main 方法以便打印出值时遇到问题。这是我目前所拥有的。

public Integer run(Object[][] array){
        for(int i=0;i<array.length;i++){
            for(int j=0;j<array[i].length;j++){
                array[i][j] = new Integer((i+1)*(j+1));
                return array;
            }
        }
    }

任何帮助将不胜感激。

【问题讨论】:

    标签: java arrays jagged-arrays


    【解决方案1】:

    问题是您的run 方法返回得太早,仅设置了第一行第一列的值。它还试图返回它不需要的array

    实际上,我根本看不到它需要返回一个值,因为它只是用值填充数组。将返回类型从 Integer 更改为 void 并删除您得到的早期 return 语句:

    public void run(Object[][] array) {
        for(int i=0;i<array.length;i++){
            for(int j=0;j<array[i].length;j++){
                array[i][j] = new Integer((i+1)*(j+1));
            }
        }
    }
    

    编辑:如果您需要用连续值填充数组,您可以在外部 for 循环中创建一个变量,初始化为 1,并在内部 for 循环中递增它:

    for(int i=0,k=1;i<array.length;i++){
        for(int j=0;j<array[i].length;j++,k++){
            array[i][j] = new Integer(k);
        }
    }
    

    或者,如果您想保持 for 循环简单,您也可以这样做:

    int val = 1;
    for(int i=0;i<array.length;i++){
        for(int j=0;j<array[i].length;j++){
            array[i][j] = new Integer(val);
            val += 1;
        }
    }
    

    【讨论】:

    • 这太棒了!我有输出。但是,我相信我错误地填充了数组。我的第一行增加一,我的第二行增加二,第三行增加三。我需要的输出将逐行不断增加数字。如果第一行以 5 结尾,则第二行以 6 开头,依此类推。关于如何更改公式以获得此输出的任何想法?非常感谢您的帮助!
    • 查看编辑后的答案,看看这是否是您要查找的内容。
    • 绝对完美,非常感谢您的帮助。在我的课程中,我并没有特别清楚地知道,当你通过一个方法填充一个数组时,我没有返回任何东西,这为我清除了很多。此外,我更喜欢第二个 for 循环,因为它更容易阅读并且实现起来非常简单。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多