java - java - 如何声明数组而不必在java中给出固定的初始大小?

标签 java arrays exception java.util.scanner

我试图声明一个数组而不必给出固定的初始大小,因为我想接受用户的大小。这是我想出的最新方法。我可以在声明时给出一个最大可接受的值,但我不想这样做,因为它对空间的利用很差。

class Example{
    int i;
    Scanner in = new Scanner(System.in);
    Example(){
        System.out.println("in constructor");
        System.out.println("enter array size: ");
        i = in.nextInt();
    }
    int[] arr = new int[i];
    void perform(){
        for(int j=0;j<i;j++)
            arr[j] = in.nextInt();
        for(int j=0;j<i;j++)
            System.out.println(arr[j]);
    }
}
public class Main{  
    public static void main(String[] args){
        Example obj = new Example();
        obj.perform();
    }
}
输出是这样的:-
在构造函数中
输入数组大小:
5
1//这是我尝试输入数组的第一个元素。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0

最佳答案

只需将其声明为 int[] arr;但是一旦你知道就分配它i有效(即 > 0)。那么你可以使用arr.length为您的循环:

Example() {
    int i; // Local
    do {
        System.out.println("enter array size: ");
        i = in.nextInt();
    } while (i <= 0);
    arr = new int[i];
}

void perform() {
    for (int j = 0; j < arr.length; j++) {
        arr[j] = in.nextInt();
    }
    // etc.
}

关于java - java - 如何声明数组而不必在java中给出固定的初始大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62616100/

相关文章:

exception - perl6 在自动激活中捕获非致命异常

java - Tomcat 8.5中部署的Spring Boot如何使用外部配置文件

java - Spring boot : java. lang.IllegalStateException:提交响应后无法调用 sendError()

java - "Background concurrent copying GC freed"日志消息后空闲时应用程序卡住

c# - 异常时获取方法的参数值

c++ - 用异常抽象包装 C 错误处理的最佳方法

java - 布罗斯-惠勒移到前面

php - 跟踪 2 个键数组

javascript - 在 JS 中查找对象特定值的键

java - 为数组索引赋值和为java中的变量赋值之间的性能差异