在Java中乘以三维数组
发布时间:2020-12-15 02:32:40 所属栏目:Java 来源:网络整理
导读:问题是:假设你有一个3d数组,Z(所以int [] [] [] Z = new int [n] [n] [n]).你要做的是打印一个新的3d数组,即Z,X倍的乘法. 说你有 z[3][3][3] = { {{3,3,3}{3,3}} {{3,3}} } 和x = 3(用户输入) 目标是打印出来: Z[0]Z[1]XXXXXXXZ[0]*Z[0]Z[1]*Z[1]XXXXXXXZ[
问题是:假设你有一个3d数组,Z(所以int [] [] [] Z = new int [n] [n] [n]).你要做的是打印一个新的3d数组,即Z,X倍的乘法.
说你有 z[3][3][3] = { {{3,3,3}{3,3}} {{3,3}} } 和x = 3(用户输入) 目标是打印出来: Z[0] Z[1] XXXXXXX Z[0]*Z[0] Z[1]*Z[1] XXXXXXX Z[0]*Z[0]*Z[0] Z[1]*Z[1]*Z[1] 由于这是一个正方形(实际上是立方体……)矩阵,每个打印出的矩阵将具有相同的尺寸.到目前为止我所拥有的是: public static void main(String[] args) { Scanner getIt = new Scanner(System.in); System.out.println("Input 1 integer n: "); int n = getIt.nextInt(); if (n > 0){ final double M[][][] = new double[n][n][n]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) M[i][j][k] = 3.0; System.out.println("Input 1 integer p: "); int p = getIt.nextInt(); if(p > 0){ for(int q = 1; q <= p; q++){ for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ for (int k = 0; k < n; k++){ System.out.printf("%f ",Math.pow(matrixMult(M[i],M[i])[j][k],q)); } System.out.println("n"); } } System.out.println("xxxxxxxxxxxxxxxxxxxxx"); } } else{ System.out.println("Woops,you entered a negative p."); } } else{ System.out.println("Woops,you entered a negative n."); } } public static double[][] matrixMult(double a[][],double b[][]) { int aRows = a.length; int aCols = a[0].length; int bCols = b[0].length; double[][] result = new double[aRows][bCols]; for(int i = 0; i < aRows; i++){ for(int j = 0; j < bCols; j++){ for(int k = 0; k < aCols; k++){ result[i][j] += a[i][k] * b[k][j]; } } } return result; } 解决方法
Paulsm4的建议是死的 – 你不想只用两个函数来完成整个事情.您应该拥有输入数组,用户输入,乘法和输出,每个都在它们自己的函数中.你可能会发现其他机会将你的程序分开 – 我强烈建议尽可能地将你的程序分解为函数,特别是因为你可以比大件更有效地调试小块. (你当前的程序有什么问题?输入?输出?计算?数据存储大小,正如亚当注意到的那样?很难说,因为你不知道哪些功能完美运行,哪些仍然有问题.)
我想建议一个进一步的改变:如果你可以提供帮助,不要把你的测试的其他条款放在如此遥远的地方.考虑改变这个: int n = getIt.nextInt(); if (n > 0){ /* loop */ System.out.println("Input 1 integer p: "); int p = getIt.nextInt(); if(p > 0){ /* loop loop loop */ } else{ System.out.println("Woops,you entered a negative p."); } } else{ System.out.println("Woops,you entered a negative n."); } 对此: int n = getIt.nextInt(); if (n <= 0) { System.out.println("Woops,you entered a negative n."); /* exit or recover */ } System.out.println("Input 1 integer p: "); int p = getIt.nextInt(); if (p <= 0) { System.out.println("Woops,you entered a negative p."); /* exit or recover */ } /* loop */ /* loop loop loop */ 以这种方式编写代码将使维护变得更加容易 至于把你带到这里的错误,我认为这可能是罪魁祸首: System.out.printf("%f ",q)); 你在这里计算很多,但根本不存储结果.你不需要这些结果进一步计算吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |