gpt4 book ai didi

java - 数组索引超出范围

转载 作者:行者123 更新时间:2023-12-01 07:35:18 24 4
gpt4 key购买 nike

public class Homework2 {
public static void main(String[] args){
int num1 = (int) (Math.random()*(10-3+1)+3);
int num2 = (int) (Math.random()*(10-3+1)+3);

double[][] doubMatrix1 = new double[num1][num2];
double[][] doubMatrix2 = new double[num1][num2];
double[][] doubMatrix3 = new double[num1][num2];

doubMatrix1 = getdoubMatrix(num1,num2);
doubMatrix2 = getdoubMatrix(num1,num2);
doubMatrix3 = addMatrices(doubMatrix1, doubMatrix2, num1, num2);
printDoubMatrix("First matrix", doubMatrix1);
printDoubMatrix("Second matrix", doubMatrix2);
printDoubMatrix("Result of adding", doubMatrix3);
doubMatrix2 =transposeMatrix(num1,num2);



}

public static double[][] getdoubMatrix(int num1,int num2){

double[][] tempArray = new double[num1][num2];
for(int i = 0;i < tempArray.length;i++)
for(int j = 0;j < tempArray[i].length;j++)
{
tempArray[i][j] = Math.random() * (100);
}
return tempArray;
}

public static double[][] addMatrices(double[][] doubMatrix1, double[][] doubMatrix2,int num1,int num2)
{

double[][] tempArray = null;
if(doubMatrix1.length == doubMatrix2.length)
if(doubMatrix1[0].length == doubMatrix2[0].length)
{
tempArray = new double[num1][num2];
for(int i = 0; i< doubMatrix1.length;i++)
for(int j = 0; j< doubMatrix1[i].length;j++ )
{
tempArray[i][j] = doubMatrix1[i][j] + doubMatrix2[i][j];
}
}
else
{
return tempArray = new double[0][0];

}

return tempArray;
}

public static void printDoubMatrix(String text,double[][] doubMatrix1){

System.out.println(text);
for(int i = 0; i< doubMatrix1.length;i++)
for(int j = 0; j< doubMatrix1[i].length;j++ )
System.out.printf("%f\n", doubMatrix1[i][j]);
}

public static double[][] transposeMatrix(int num1, int num2){
double[][] tempArray = new double[num2][num1];
for(int i = 0;i < tempArray.length;i++)
for(int j = 0;j < tempArray[i].length;j++)
{
tempArray[i][j] = tempArray[j][i];
System.out.printf("%f\n", tempArray[i][j]);
}
return tempArray;
}

}

我在运行这个程序时遇到问题,没有错误,但是当我运行它时,它说数组索引越界,问题出在转置方法上,谁能告诉我如何解决这个问题?

最佳答案

transpose的for循环中的赋值 方法应该是这样的:-

tempArray[i][j] = doubleMatrix2[j][i];

而不是:-

tempArray[i][j] = tempArray[j][i];

在上面的代码中,您从新创建的数组 tempArray 中分配值。只对它自己。这没有道理。不会影响阵列。它还会抛出 ArrayIndexOutOfBounds异常如果 row != col

您需要使用要转置的矩阵。

由于您正在为 doubleMatrix2 调用此方法

doubMatrix2 =transposeMatrix(num1,num2);

你的两个矩阵就像:-

tempArray[][] = new double[num2][num1];

doubleMatrix[][] = new double[num1][num2];

因此分配 doubleMatrix[j][i] 是有意义的至tempArray[i][j] 。因为两个矩阵的行数和列数相反。

关于java - 数组索引超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12922100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com