Java数组录入、复制、降序排序功能异常无输出问题排查
问题修复说明
核心错误点
askInfo方法返回值错误:用户输入0时返回了数值0,导致后续创建的realArray长度为0,无内容可输出。正确逻辑应返回当前已录入的有效数字个数i。copyInfo方法返回值未被接收:Java为值传递,方法内对形参realArray的重新赋值无法影响外层main方法的变量,需要主动接收方法返回的处理后数组。setArray排序逻辑错误:当前判断条件实现的是升序排序,将判断条件反转即可实现降序要求。
修正后完整代码
import java.util.*; public class RevisionExercise { public static void main(String[] args) { int[] tempArray = new int[100]; System.out.println("Type in numbers. Type zero to quit."); int amountOfNumbers = askInfo(tempArray); int[] realArray = new int[amountOfNumbers]; // 接收copyInfo返回的处理后数组 realArray = copyInfo(realArray, tempArray); setArray(realArray); printArray(realArray); } public static int askInfo(int[] tempArray) { Scanner reader = new Scanner(System.in); int i; for (i = 0; i < tempArray.length; i++) { System.out.print((i+1) + ". number: "); tempArray[i] = reader.nextInt(); if (tempArray[i] == 0) { // 返回已录入的有效数字个数,不是0 return i; } } return i; } private static int[] copyInfo(int[] realArray, int[] tempArray) { int targetIndex = 0; for( int sourceIndex = 0; sourceIndex < tempArray.length; sourceIndex++ ) { if( tempArray[sourceIndex] != 0 ) tempArray[targetIndex++] = tempArray[sourceIndex]; } realArray = new int[targetIndex]; System.arraycopy( tempArray, 0, realArray, 0, targetIndex ); return realArray; } public static int[] setArray(int[] realArray) { int temp = 0; for (int i = 0; i <realArray.length; i++) { for (int j = i+1; j <realArray.length; j++) { // 反转判断条件实现降序 if(realArray[i] < realArray[j]) { temp = realArray[i]; realArray[i] = realArray[j]; realArray[j] = temp; } } } return realArray; } public static void printArray(int[] realArray ) { System.out.println("\nOrdered array: "); for(int i = 0; i < realArray .length; i++) { System.out.println(realArray [i]); } } }
运行验证
修改后输入测试用例3、8、5、6、9、0,即可得到预期的降序输出结果。
内容的提问来源于stack exchange,提问作者Arzidal
相关产品推荐
相关产品推荐

