为何已定义的nums数组仍被JDK编译器提示未找到?
问题分析:数组nums未找到的原因及解决办法
你遇到的问题核心是变量作用域不匹配:
nums数组是定义在main方法里的局部变量,它的作用域仅限main方法内部sort是一个独立的静态方法,无法直接访问其他方法里的局部变量,所以编译器会提示“nums未找到”
解决方案一:给sort方法添加参数传递数组
这是最推荐的写法,符合代码封装原则,灵活性更高。修改后的代码如下:
import java.util.Random; import java.util.Arrays; public class BubbleSort { public static void main(String[] args) { Random rand = new Random(); int[] nums = new int[10]; for (int i = 0; i < nums.length; i++) nums[i] = rand.nextInt(100); System.out.println("Unsorted array: " + Arrays.toString(nums)); sort(nums); // 调用时传入nums数组 System.out.println("Sorted array: " + Arrays.toString(nums)); } // 方法添加int[]类型的参数 public static void sort(int[] nums) { int temp; for (int i = 0; i < nums.length - 1; i++) { for (int j = 0; j < nums.length - i - 1; j++) { if (nums[j] > nums[j+1]) { temp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = temp; } } } } }
解决方案二:将nums改为类的静态成员变量
把nums定义在类的级别(方法外面),作为静态成员变量,这样类里的所有静态方法都能访问它:
import java.util.Random; import java.util.Arrays; public class BubbleSort { // 定义为类的静态成员变量 static int[] nums; public static void main(String[] args) { Random rand = new Random(); nums = new int[10]; for (int i = 0; i < nums.length; i++) nums[i] = rand.nextInt(100); System.out.println("Unsorted array: " + Arrays.toString(nums)); sort(); System.out.println("Sorted array: " + Arrays.toString(nums)); } public static void sort() { int temp; for (int i = 0; i < nums.length - 1; i++) { for (int j = 0; j < nums.length - i - 1; j++) { if (nums[j] > nums[j+1]) { temp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = temp; } } } } }
注意:第二种方式虽然能解决问题,但静态成员变量会一直驻留在内存中,不利于资源回收,也不符合面向对象的设计思想,因此更推荐第一种传参的写法。
内容的提问来源于stack exchange,提问作者stupidmoron
相关产品推荐
相关产品推荐

