如何不使用import语句调用Arrays类方法?附报错代码求排查
咱们先解决第一个问题,再一步步分析你代码里的问题哈~
问题1:如何不使用import语句调用Arrays类中的方法?
其实很简单,直接使用全限定类名调用静态方法就可以了。Arrays类在java.util包下,不需要写import java.util.Arrays;,只要在调用方法的时候写成java.util.Arrays.方法名(参数)就行。比如要排序一个数组:
String[] arr = {"b", "a", "c"}; java.util.Arrays.sort(arr); // 直接用全限定名调用sort静态方法
因为Arrays里的常用方法(比如sort、toString)都是静态方法,所以不需要实例化类,直接通过全限定类名调用就好。
问题2:代码错误分析及修正
你的代码里有不少语法和逻辑问题,我一条一条给你理清楚:
- 错误1:混淆了Arrays.sort和Scanner的用法
你写的java.util.Arrays.sort input = new java.util.Arrays.sort(System.in);完全不对。Arrays.sort是用来排序数组的静态方法,不是用来读取输入的类。要读取控制台输入,应该用java.util.Scanner,正确写法是:java.util.Scanner input = new java.util.Scanner(System.in); - 错误2:方法参数不匹配
sortArray方法定义时要求传入一个String[] array参数,但你在main方法里调用sortArray();时没有传任何参数,这会直接编译失败。 - 错误3:HTML转义字符误用
代码里的split(" ")是HTML的双引号转义字符,Java里应该直接用双引号split(" "),不然会报语法错误。 - 错误4:return语句位置错误
你把return (array);写在了sortArray方法的大括号外面,这不符合Java语法,return必须放在方法内部的代码块里。 - 错误5:main方法的位置错误
Java的main方法必须定义在类的内部,你的代码里把main方法写到了ArraySorting类的外面,这会导致编译错误。 - 错误6:数组打印方式错误
System.out.println(string.toString(array));是错误写法,String类没有接收数组参数的toString方法。如果要打印数组内容,应该用java.util.Arrays.toString(array)把数组转换成字符串输出。 - 错误7:逻辑混乱
你在sortArray方法里既接收了array参数,又自己读取输入生成了str数组,但最后排序的是参数array,逻辑矛盾,需要明确要排序的是输入的数组还是传入的参数数组。
修正后的示例代码
假设你想要实现的功能是:读取控制台输入的字符串,分割成数组后排序,再返回排序后的数组,修正后的代码可以是这样:
class ArraySorting { /** * @param array unordered sequence of strings * @return ordered array of strings */ public static String[] sortArray(String[] array) { // 对传入的数组进行排序 java.util.Arrays.sort(array); return array; } public static void main(String[] args) { // 读取控制台输入 java.util.Scanner input = new java.util.Scanner(System.in); System.out.println("请输入用空格分隔的字符串:"); String string = input.nextLine(); // 分割成字符串数组 String[] str = string.split(" "); // 调用排序方法 String[] sortedArray = sortArray(str); // 打印排序后的数组 System.out.println(java.util.Arrays.toString(sortedArray)); // 关闭Scanner input.close(); } }
这样代码就能正常运行,而且全程没有使用import语句,都是用全限定类名调用相关方法。
内容的提问来源于stack exchange,提问作者N-DEV
相关产品推荐
相关产品推荐

