将数组值从一个数组更改为另一个数组

时间:2017-11-20 15:14:27

标签: java arrays

我正在为CS类进行Java分配。 我在将值从一个用户定义的数组传输到另一个数组时遇到问题。 我能够将数组传输到另一个方法,但我不能让数组的值同意第二个数组的参数。 谢谢你的帮忙。

    import java.util.*;
    import java.io.IOException;
    public class HW5_1{ 
    public static void transpose(int mn[][]) throws IOException
    {
     Scanner keyboard = new Scanner(System.in);
     int i, j;
     int nm[][] = new int [5][3];
     for(i = 0; i < 5; i++){
     for(j = 0; j < 3; j++){
     nm[i][j]= mn[j][i];
    }
    System.out.println(nm[i][j]+ "   " + "/n");}
  }
  public static void main(String[] args) throws IOException{ 

    Scanner keyboard = new Scanner(System.in);

    System.out.println("How many rows?");
    int row = keyboard.nextInt();

    System.out.println("How many columns?");
    int column = keyboard.nextInt();

    //Create array 
    int [][] mn = new int[row][column];

    //Create variables
    int i,j = 0;

    //For loops to receive input
    for(i = 0; i < row; i++)
    {
     for (j = 0; j < column; j++)
     {   
      System.out.println("Enter the numbers: ");
      mn[i][j] = keyboard.nextInt();
     }
    }
   transpose(mn);
    //Moves array to transpose method
  }
}

我会得到这个答案:

java.lang.ArrayIndexOutOfBoundsException: 3
    at HW5_1.transpose(HW5_1.java:19)
    at HW5_1.main(HW5_1.java:47)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267)

2 个答案:

答案 0 :(得分:0)

我认为在你的transpose - 方法中,你希望你的System.out.println(nm[i][j]+ " " + "/n");在for循环中。此外,您的方法中还有许多不需要的东西。例如。 throws声明,以及keyboard变量。

然后你有一些静态声明,如53分别作为行列。可以通过动态读取输入数组中的值来跳过此步骤。

最后,您不需要在循环外部使用ij变量,因此您可以将它们放在内部。

所以清理过的方法看起来像这样:

public static void transpose( int mn[][] ){
    int nm[][] = new int[mn[0].length][mn.length]; // use the values from mn
    for( int i = 0; i < 5; i++ ){
        for( int j = 0; j < 3; j++ ){
            nm[i][j] = mn[j][i];
            System.out.println(nm[i][j] + "   " + "/n");
        }
    }
}

答案 1 :(得分:0)

您的新阵列中有一个固定大小:

int nm[][] = new int [5][3];

使用原始数组的尺寸使其变为:

public static void transpose(int mn[][]) throws IOException {
    Scanner keyboard = new Scanner(System.in);
    int i, j;
    int nm[][] = new int [mn.length][mn[0].length];
    for(i = 0; i < mn.length; i++){
        for(j = 0; j < mn[0].length; j++){
            nm[i][j]= mn[j][i];
        }
        System.out.println(nm[i][j]+ "   " + "/n");
    }
}