Java二维数组转置程序异常求助:循环无限输入问题
嘿,我来帮你搞定这个问题——其实它不是真的无限循环,只是你的代码里有几个小细节让你产生了误解,同时还有一些逻辑上的小bug需要修复:
问题根源分析
- 输入提示的误导:你在每次输入循环里都打印
Enter array from 1 to 9,这会让你误以为只需要输入1-9的数值各一次,但实际上你的数组是9×9的,需要连续输入81个数值,所以你会觉得程序一直在要求输入,停不下来。 - 无效的提前打印:在输入循环里你直接打印了
myArray2[i][j],但此时myArray2还没有被赋值,它的所有元素都是默认的0,这完全是多余的输出,还会干扰你的判断。 - 转置后打印逻辑混乱:你当前的打印会把所有数组元素连在一起输出,没有换行或分隔,根本看不出数组的结构。
修正后的完整代码
import java.util.Scanner; /* To demonstrate TRANSPOSE USING 2-D array */ public class Array_2ddd { public static void main(String args[]) { Scanner s1 = new Scanner(System.in); int i, j; // 如果想快速测试,可以把9改成3,只需要输入9个元素 int myArray1[][] = new int[9][9]; int myArray2[][] = new int[9][9]; // 输入原始数组,优化提示信息 System.out.println("请输入9×9数组的81个元素(每行输入9个数值):"); for (i = 0; i < 9; i++) { System.out.println("正在输入第" + (i + 1) + "行的元素:"); for (j = 0; j < 9; j++) { myArray1[i][j] = s1.nextInt(); } } // 执行转置操作(这部分逻辑是对的) for (i = 0; i < 9; i++) { for (j = 0; j < 9; j++) { myArray2[i][j] = myArray1[j][i]; } } // 打印原始数组,优化格式 System.out.println("\n你输入的原始数组是:"); for (i = 0; i < 9; i++) { for (j = 0; j < 9; j++) { System.out.print(myArray1[i][j] + "\t"); } System.out.println(); // 每行结束换行,保持数组结构 } // 打印转置后的数组,优化格式 System.out.println("\n转置后的数组是:"); for (i = 0; i < 9; i++) { for (j = 0; j < 9; j++) { System.out.print(myArray2[i][j] + "\t"); } System.out.println(); } s1.close(); // 关闭Scanner,避免资源泄漏 } }
关键修改说明
- 清晰的输入提示:明确告诉用户需要输入的总元素数,并且按行提示,让你清楚当前输入的进度,不会误以为程序卡住。
- 移除无效输出:删掉了输入循环中对未初始化
myArray2的打印,避免干扰。 - 格式化数组打印:用
\t分隔元素、每行结束换行,让输出的数组结构一目了然,符合二维数组的直观形态。 - 可选优化:如果不想输入81个元素测试,可以把数组大小改成3×3(所有
9替换成3),这样只需要输入9个元素就能快速验证转置逻辑。
内容的提问来源于stack exchange,提问作者Smit Shah
相关产品推荐
相关产品推荐

