我正在为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)
答案 0 :(得分:0)
我认为在你的transpose
- 方法中,你希望你的System.out.println(nm[i][j]+ " " + "/n");
在for循环中。此外,您的方法中还有许多不需要的东西。例如。 throws
声明,以及keyboard
变量。
然后你有一些静态声明,如5
和3
分别作为行列。可以通过动态读取输入数组中的值来跳过此步骤。
最后,您不需要在循环外部使用i
和j
变量,因此您可以将它们放在内部。
所以清理过的方法看起来像这样:
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");
}
}