Java开发遇两类错误求助:method未定义、表达式类型需为数组
Fixing Your Custom Array Creation & Exception Issues
Hey Steve, let's figure out why you're hitting exceptions and get that consecutive-number array working properly. From the code snippet you shared, most of the logic makes sense—you're trying to take a user's input size, create a custom array, and fill it with 1, 2, ..., n. The problems are likely tied to how your Array_1 class is implemented, plus a few small tweaks to your main code.
Common Causes of Exceptions Here
Let's break down the most likely issues:
- Your
Array_1class doesn't support direct index access
Java doesn't let you use[]on custom objects by default. If yourArray_1class doesn't have an internal array field or methods to get/set values, lines likeuserArray[i] = i + 1will throw compile or runtime errors. - No input validation for array size
If the user enters 0 or a negative number, you'll get aNegativeArraySizeExceptionwhen trying to initialize the array. - Uninitialized internal array in
Array_1
If your class's constructor doesn't properly create the underlying array, you'll hit aNullPointerExceptionwhen trying to assign values.
A Working Array_1 Class Example
First, let's build a correct version of your Array_1 class that fixes these gaps:
public class Array_1 { // Internal array to store the values private int[] elements; // Public length property to match your loop logic public int length; // Constructor with size validation public Array_1(int size) { if (size <= 0) { throw new IllegalArgumentException("Array size must be a positive number!"); } this.elements = new int[size]; this.length = size; } // Method to set a value at a specific index public void set(int index, int value) { // Add index check to avoid ArrayIndexOutOfBoundsException if (index < 0 || index >= this.length) { throw new ArrayIndexOutOfBoundsException("Index " + index + " is out of bounds for array of length " + this.length); } this.elements[index] = value; } // Method to get a value from a specific index public int get(int index) { if (index < 0 || index >= this.length) { throw new ArrayIndexOutOfBoundsException("Index " + index + " is out of bounds for array of length " + this.length); } return this.elements[index]; } }
Updated Main Code
Now adjust your main code to work with this class (and fix a few small issues like reusing the choice variable):
if (choice == 1) { System.out.println("How big would you like your array?"); int arraySize = sc.nextInt(); // Use a dedicated variable instead of overwriting 'choice' try { Array_1 userArray = new Array_1(arraySize); // Fill the array with consecutive numbers for (int i = 0; i < userArray.length; i++) { userArray.set(i, i + 1); } // Optional: Print the array to verify it works System.out.println("Your array elements:"); for (int i = 0; i < userArray.length; i++) { System.out.print(userArray.get(i) + " "); } } catch (IllegalArgumentException e) { // Catch invalid size inputs System.out.println("Error: " + e.getMessage()); } catch (ArrayIndexOutOfBoundsException e) { // Catch index errors (though our set method already prevents this) System.out.println("Error: " + e.getMessage()); } }
Key Fixes Explained
- We added input validation in the
Array_1constructor to block invalid sizes. - We used
set()andget()methods to safely access array elements (since Java doesn't allow custom[]operators). - We stopped reusing the
choicevariable for the array size—this prevents confusion and bugs later. - We added try/catch blocks to handle exceptions gracefully instead of crashing the program.
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

