【问题标题】:Print out array user entered打印出用户输入的数组
【发布时间】:2026-01-23 04:45:02
【问题描述】:

我正在尝试打印用户输入的号码,但出现错误。这是我的代码:

public static void main(String[] args) {
    Scanner input=new Scanner(System.in);
    int size=0,score=0;
    int [] a=new int[size];
    int len=a.length;
    do
    {
        System.out.print("Please enter a number between 1 to 5: ");
        size=input.nextInt();
    }
    while ((size<1) || (size>5));
    for (int i=1;i<=size;i++)
    {   
        do
        { 
            System.out.print("Enter your "+i+" score (1-100):");
            score=input.nextInt();
        }
        while((score<1) || (score>100));
    }
    for (int i=1;i<=size;i++)
        System.out.println(a[i]+ " ");
    }
}

这是我的输出和错误: 请输入一个介于 1 到 5 之间的数字:2 输入您的 1 分 (1-100):54 输入你的 2 分数 (1-100):64 线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:1 在 Week08.BigArray2.main(BigArray2.java:27)

【问题讨论】:

  • 您的 for 循环格式错误。 Java中的数组从0开始,以长度1结束,将for循环更改为“for(int i = 0; i
  • 当你创建 a 数组时,size 为 0,所以数组总是 0 个条目大。因此,当您尝试将某些内容保存到数组中时,它会崩溃。阅读大小后将a = new int[size] 移至一行。
  • 我现在明白这个问题了。谢谢大家。

标签: java arrays


【解决方案1】:

你的代码有四个错误

  1. 数组初始化为零大小
  2. 用户输入未存储在数组中
  3. 从索引 1 开始迭代,但数组从 0 开始
  4. 扫描仪未关闭

    Scanner input = new Scanner(System.in);
    int size = 0, score = 0;
    
    do {
        System.out.print("Please enter a number between 1 to 5: ");
        size = input.nextInt();
    } while ((size < 1) || (size > 5));
    
    int[] a = new int[size]; //1
    
    for (int i = 0; i < size; i++) {
        do {
            System.out.print("Enter your " + (i + 1) + " score (1-100):");
            score = input.nextInt();
            a[i] = score; //2
        } while ((score < 1) || (score > 100));
    }
    
    for (int i = 0; i < size; i++) //3
        System.out.print(a[i] + " ");
    
    input.close(); //4
    

输出

Please enter a number between 1 to 5: 4
Enter your 1 score (1-100):99
Enter your 2 score (1-100):98
Enter your 3 score (1-100):97
Enter your 4 score (1-100):96
99 98 97 96 

【讨论】:

    【解决方案2】:

    你的代码有几个问题:

    1. 声明的数组大小为零。在java中,数组的大小是在初始化时声明的,以后可以更改。
    2. 您从未将分数存储到数组中。因此数组是空的。
    3. 在迭代数组时,Java 中的循环索引总是从零开始。

    这是修改后的工作程序:

    导入 java.util.Scanner;

    公共类 ArrayPrint {

        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            int size = 0, score = 0;
            int[] a;
    
            do {
                System.out.print("Please enter a number between 1 to 5: ");
                size = input.nextInt();
            } while ((size < 1) || (size > 5));
    
            //Allocating space to array
            a = new int[size];
            int len = a.length;
    
            for (int i = 0; i <size; i++) {
                do {
                    System.out.print("Enter your " + i + " score (1-100):");
                    score = input.nextInt();
                    a[i] = score;
                } while ((score < 1) || (score > 100));
            }
            for (int i = 0; i <size; i++)
                System.out.println(a[i] + " ");
        }
    }
    

    输出

    Please enter a number between 1 to 5: 2
    Enter your 0 score (1-100):22
    Enter your 1 score (1-100):11
    22 
    11 
    

    【讨论】:

      【解决方案3】:

      请查看您的第 4 行代码 int [] a=new int[size];,此时 size=0,并且您已初始化大小为 0 的整数数组“a”,但您最终尝试使用代码迭代数组“a” for (int i=1;i<=size;i++) System.out.println(a[i]+ " "); } 导致数组索引越界异常。

      在第一次执行while循环后移到以下代码行:

      int[] a = new int[size];
          int len = a.length;
      

      现在更正您的最后一个 for 循环,如下所示:

      for (int i = 0; i < size; i++)
              System.out.println(a[i] + " ");
      }
      

      数组的索引从 0 开始,到 size-1 结束。

      【讨论】: