【问题标题】:passing random numbers to a 2d array in java在java中将随机数传递给二维数组
【发布时间】:2013-03-09 00:01:50
【问题描述】:

为什么我的代码中出现错误 - 我创建了两个方法,randomGen 用于生成随机数,matrixGen 用于创建带有随机数的矩阵。我收到不兼容的类型错误。如果有人可以请指出我可能做错的正确方向..我仍处于学习阶段..这是我的代码:

import java.util.Random;

public class sparse{
    static int matrix [][] = new int[6][6];

    public static int randomGen(){
        int rA;
        Random r = new Random();
        rA = r.nextInt(100);
        return rA;
    }

    public static int[][] matrixGen(){
        for(int i=0; matrix[i].length < i; i++){
            for(int j=0; matrix[j].length <j; j++){
                matrix[i] = matrix[i].randomGen();
                matrix[j] = matrix[j].randomGen();
            }
        }
        return matrix[i][j];
    }

    public static void main(String args[]){
        new sparse();
    }
}

【问题讨论】:

  • 您遇到什么错误?请复制并粘贴准确 错误消息。另外,请修正您的代码格式。
  • 要有堆栈跟踪!我们不再感到困惑。
  • 我不认为randomGen() 可以在整数或整数数组上调用。
  • 如何调用它来填充数组?

标签: java matrix 2d sparse-matrix


【解决方案1】:

摆脱randomGen,使用这个:

public static int[][] matrixGen(){
    Random r = new Random( );
    for(int i=0; i < matrix.length; i++){
        for(int j=0; j < matrix[i].length; j++){
            matrix[i][j] = r.nextInt( 100 );
        }
    }
    return matrix;
}

3(更新:4)东西:

  1. 你用错了Random。您应该创建一次,然后从中获取大量数字。
  2. 你试图在一个 int 上调用 randomGen,这是没有意义的;它是sparse 的属性,而不是int。你可以做到matrix[i][j] = randomGen()
  3. 您确实在做一些非常奇怪的事情来访问数组元素。希望这段代码能为您澄清一下。
  4. 你的循环也很奇怪。我已经在这个 sn-p 中修复了它们。

【讨论】:

    【解决方案2】:

    这个:

        matrix[i] = matrix[i].randomGen();
        matrix[j] = matrix[j].randomGen();
    

    必须是这样的:

        matrix[i][j] = randomGen();
    

    【讨论】:

    • 其实应该是matrix[i][j] = randomGen():他的矩阵索引也搞混了。
    【解决方案3】:

    您的matrixGen 方法很混乱。您的外部i for 循环在达到matrix 数组的长度时需要停止迭代,而不是ith 内部数组的长度。同样,您的内部j for 循环需要在达到matrix[i] 数组的长度时停止迭代。

    如果您想为二维数组中的一个特定位置分配一个值,那么您需要一个分配,而不是两个;在= 的左侧,您需要同时使用 ij

    您无需在调用randomGen 之前添加matrix[i]matrix[j],因为您在同一个类中定义了它。

    你甚至没有调用 matrixGen 方法。

    【讨论】:

      【解决方案4】:

      首先,在提供的代码中,您的main 什么都不做,因为您创建了一个不使用的对象。我认为它会在未来继续。

      至于您遇到的错误,我还必须做出假设,因为没有提供其他信息。

      您遇到的错误可能在您的matrixGen 方法中,我认为该方法应该填充静态矩阵。应该是这样的:

      public static void matrixGen(){
          for(int i=0; i < matrix.length; i++){
              for(int j=0; j < matrix[i].length; j++){
                  matrix[i][j] = randomGen();
              }
          }
      }
      
      1. void,因为您正在修改矩阵,而不是创建新矩阵;
      2. 您的循环条件错误。索引会递增,直到达到各自的长度(i 用于行,j 用于列);
      3. 使用两个索引(行和列)访问矩阵单元格
      4. randomGen 是来自 class sparse 的方法,而不是来自数组。

      编辑: 正如 Dave 所说,您不应该每次都创建一个新的 Random 实例。将Random 存储在一个变量中,就像您对矩阵所做的那样,或者在进入循环之前以同样的方法创建它。

      【讨论】:

      • 我认为还有一点值得注意的是,他不应该为每个随机数都创建一个新的 Random 对象。
      猜你喜欢
      • 2013-12-18
      • 1970-01-01
      • 2017-08-05
      • 2020-11-01
      相关资源
      最近更新 更多