Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何用随机整数[1,9]填充二维数组,并打印出每行行数和每列数和的二维数组?_Java_Arrays - Fatal编程技术网

Java 如何用随机整数[1,9]填充二维数组,并打印出每行行数和每列数和的二维数组?

Java 如何用随机整数[1,9]填充二维数组,并打印出每行行数和每列数和的二维数组?,java,arrays,Java,Arrays,下面的代码是我到目前为止所拥有的代码,没有任何东西可以工作。我打算主要声明一个7×10的二维数组。将该数组传递给使用随机整数填充数组的方法[1,9]。将填充的数组传递给一个方法,该方法使用每行末尾的行和以及每列末尾的列和打印二维数组。行和列标签也必须打印。任何帮助都将不胜感激 package二维数组; 导入java.util.array; 导入java.util.Random; /** * *@作者克里斯蒂7 */ 公共类二维数组{ //此方法用于生成1到9之间的随机整数。 公共静态int ra

下面的代码是我到目前为止所拥有的代码,没有任何东西可以工作。我打算主要声明一个7×10的二维数组。将该数组传递给使用随机整数填充数组的方法[1,9]。将填充的数组传递给一个方法,该方法使用每行末尾的行和以及每列末尾的列和打印二维数组。行和列标签也必须打印。任何帮助都将不胜感激

package二维数组;
导入java.util.array;
导入java.util.Random;
/**
*
*@作者克里斯蒂7
*/
公共类二维数组{
//此方法用于生成1到9之间的随机整数。
公共静态int randInt(){
Random rand=新的Random();
int-randNum;
randNum=rand.nextInt(9)+1;
返回randNum;
}
//此方法用于用随机整数填充二维数组
公共静态int[]fillArray(int[]toFill){
int[]toReturn=新int[0][0];
for(int r=0;r
我认为您的代码中的问题是您在
int[][]toreern=new int[0][0]行中初始化了二维数组。这里给出数组大小和维度,然后在循环中尝试根据
toFill
长度填充数组。因为数组的大小是固定的,并且不会动态扩展,所以不能这样做

下面是获得arrayindexoutofboundsexception的相同样式代码。我建议您为方法指定长度和维度,然后使用这些大小初始化数组

下面的代码也得到了一个异常,因为与您所做的相同的问题是将数组初始化为某个大小,然后尝试向其中添加元素

public static void main(String[] args) {
    int [] []  x =new int[0][0];

    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            x[i][j]=i+j;

        }

    }


    for (int i = 0; i < 5; i++) {
        for (int j = 0; j < 5; j++) {
            System.out.println(x[i][j]);
        }
    }
}
publicstaticvoidmain(字符串[]args){
int[]x=新的int[0][0];
对于(int i=0;i<5;i++){
对于(int j=0;j<5;j++){
x[i][j]=i+j;
}
}
对于(int i=0;i<5;i++){
对于(int j=0;j<5;j++){
System.out.println(x[i][j]);
}
}
}

您可能知道,此代码存在很多问题。大多数错误源于错误地实例化和访问数组。我把它修好了:

public static int randInt(){
    Random rand = new Random();
    int randNum;
    randNum = rand.nextInt(9)+1;
    return randNum;

}

//This method is for filling a 2D array with random integers 
public static int[][] fillArray(int[][] toFill){
    int[][] toReturn = new int[toFill.length][toFill[0].length];

    for(int r = 0; r < toFill.length; r++){
        for(int c = 0; c < toFill[0].length; c++){
            toReturn[r][c] = randInt();
        }
    }
    return toReturn;
}

//This method is for for summing rows and columns, and printing rows, columns, the sum of ruws at each row, and the sum of columns at each column.
public static void summingRC(int[][] toSum){
    int[] colSum = new int[toSum[0].length];
    int[] rowSum = new int[toSum.length];
    for(int i = 0; i < toSum.length; i++){
        for(int j = 0; j < toSum[i].length; j++){
            colSum[j] += toSum[i][j];
            rowSum[i] += toSum[i][j];
        }
    }
    System.out.println("Matrix: ");
    print2dArray(toSum);
    System.out.println("Col sum:");
    printArray(colSum);
    System.out.println("Row sum:");
    printArray(rowSum);

}

/**
 * @param args the command line arguments
 * 
 */

public static void main(String[] args) {

    //Declare a 7x10 2D array 
    int [][] twoDArray = new int[7][10];

    //call fillArray method.
    int[][] fillingArray = fillArray(twoDArray);

    //call SummingRC method
    summingRC(fillingArray);

}

public static void print2dArray(int[][] arr){
    for(int i = 0; i < arr.length; i++){
        for(int j = 0; j < arr[i].length; j++){
            System.out.print(arr[i][j] +  " ");
        }
        System.out.println();
    }
}

public static void printArray(int arr[]){
    for(int i = 0; i < arr.length; i++){
        System.out.print(arr[i] +  " ");
    }
    System.out.println();
}

如果您使用的是Java8。您可以通过
Stream
优雅地实现这一点

代码如下:

import java.util.Arrays;
import java.util.stream.IntStream;

public class Q47129466 {
  public static void main(String[] args) {
    int[][] mat = get(5, 5);
    System.out.println(Arrays.deepToString(mat));
    System.out.println(Arrays.toString(rowSum(mat)));
    System.out.println(Arrays.toString(columnSum(mat)));
  }

  public static int[][] get(int width, int height) {
    return IntStream.range(0, height)
        .mapToObj(c -> IntStream.range(0, width)
            .map(r -> (int) (9 * Math.random() + 1))
            .toArray())
        .toArray(int[][]::new);
  }

  public static int[] rowSum(int[][] matrix) {
    return Arrays.stream(matrix).mapToInt(row -> IntStream.of(row).sum()).toArray();
  }

  public static int[] columnSum(int[][] matrix) {
    return Arrays.stream(matrix).reduce((a, b) -> add(a, b)).orElse(new int[0]);
  }

  public static int[] add(int[] a, int[] b) {
    int[] sum = new int[Math.max(a.length, b.length)];
    for (int i = 0; i < sum.length; i++) {
      sum[i] = (i < a.length ? a[i] : 0) + (i < b.length ? b[i] : 0);
    }
    return sum;
  }
}
导入java.util.array;
导入java.util.stream.IntStream;
公开课Q47129466{
公共静态void main(字符串[]args){
int[][]mat=get(5,5);
System.out.println(Arrays.deepToString(mat));
System.out.println(Arrays.toString(rowSum(mat));
System.out.println(Arrays.toString(columnSum(mat));
}
公共静态int[]get(int-width,int-height){
返回IntStream.range(0,高度)
.mapToObj(c->IntStream.range(0,宽度)
.map(r->(int)(9*Math.random()+1))
.toArray())
.toArray(int[]]::新建);
}
公共静态int[]行和(int[][]矩阵){
返回Arrays.stream(matrix).mapToInt(row->IntStream.of(row).sum()).toArray();
}
公共静态int[]列和(int[]矩阵){
返回array.stream(matrix).reduce((a,b)->add(a,b)).orElse(newint[0]);
}
公共静态int[]add(int[]a,int[]b){
int[]总和=新的int[Math.max(a.length,b.length)];
对于(int i=0;i
提交代码时,请粘贴它,用鼠标选择它,然后按编辑器中的
{}
按钮。这将正确格式化它。
import java.util.Arrays;
import java.util.stream.IntStream;

public class Q47129466 {
  public static void main(String[] args) {
    int[][] mat = get(5, 5);
    System.out.println(Arrays.deepToString(mat));
    System.out.println(Arrays.toString(rowSum(mat)));
    System.out.println(Arrays.toString(columnSum(mat)));
  }

  public static int[][] get(int width, int height) {
    return IntStream.range(0, height)
        .mapToObj(c -> IntStream.range(0, width)
            .map(r -> (int) (9 * Math.random() + 1))
            .toArray())
        .toArray(int[][]::new);
  }

  public static int[] rowSum(int[][] matrix) {
    return Arrays.stream(matrix).mapToInt(row -> IntStream.of(row).sum()).toArray();
  }

  public static int[] columnSum(int[][] matrix) {
    return Arrays.stream(matrix).reduce((a, b) -> add(a, b)).orElse(new int[0]);
  }

  public static int[] add(int[] a, int[] b) {
    int[] sum = new int[Math.max(a.length, b.length)];
    for (int i = 0; i < sum.length; i++) {
      sum[i] = (i < a.length ? a[i] : 0) + (i < b.length ? b[i] : 0);
    }
    return sum;
  }
}