【问题标题】:My arraylist size is a zero even though I've added items to the it即使我向其中添加了项目,我的数组列表大小也为零
【发布时间】:2020-08-22 01:36:56
【问题描述】:

所以我尝试查找此错误 (Exception in thread "main" java.lang.ArithmeticException: / by zero) 并认为我在下面的代码中的数组列表大小为零。我不明白为什么它为零或如何解决它。它是否与阵列的容量有关?我似乎无法弄清楚我的代码有什么问题。

顺便说一句,这段代码用于计算数组列表中所有元素的平均值,并让用户知道平均值是多少。

我仍然是 Java 的初学者,所以如果这看起来很愚蠢,我深表歉意。任何帮助表示赞赏!

import java.util.*;
public class ClassStuff {

    public static void main(String[] args) {
        
        Scanner scan = new Scanner(System.in);
        
        ArrayList <Integer> myArray = new ArrayList <Integer> ();
        int userInput = 0;
        String userConf = "";
        
        while ((!userConf.equalsIgnoreCase("y"))) {
            
            System.out.println("Please enter a number: ");
            userInput = scan.nextInt();
            
            for (int i = 1; i <= myArray.size(); i++) {
                userInput = scan.nextInt();
                myArray.add(userInput);
            }
            
            scan.nextLine();
            System.out.println("Are you done entering numbers? (y/n): ");
            userConf = scan.nextLine();
            
        }

        int result = computeAvg(myArray);
        
        System.out.println("Average is: " + result);
    }

    
    public static int computeAvg(List <Integer> myArray) {
        int sum = 0;
        int avg = 0;
        
         for (int i = 0; i < myArray.size(); i++) {               
              sum = sum + myArray.get(i);
         }
         
         return avg = sum/myArray.size();    
    }

}

【问题讨论】:

  • 在 while 循环中的 for 循环中,您使用了 myArray.size,即使它已经是 0。因此,将数字添加到 arraylist 的 for 循环不起作用。
  • 数组中的第一个元素在索引零处,最后一个元素在array.size - 1处
  • List.size() 返回已添加的元素数。它从零开始。
  • 如果事先知道大小,请使用数组

标签: java exception arraylist average


【解决方案1】:

我假设以下几行:

System.out.println("Please enter a number: ");
userInput = scan.nextInt();

获取要添加到数组列表中的元素数量,我们稍后通过 for 循环将其添加到列表中。在这种情况下,将其保存在另一个名为 list_length 的变量中,因为 userInput 在 for 循环中不断变化。

System.out.println("Please enter a number: ");
list_length = scan.nextInt();

然后将此输入后的 for 循环更改为:

for(int i = 1; i <= list_length; i++) {
    userInput = scan.nextInt();
    myArray.add(userInput);
}

这是因为您将 for 循环的结尾更改为 myArray.size(),但请记住它已经为 0,因此 for 循环从 1 &gt;= 0 开始结束。您可能想要做的是将list_length 数量的数字添加到数组列表中

【讨论】:

    【解决方案2】:

    我发现了你的问题。

    问题在于你的 for 循环,因为 arrayList 在循环期间没有捕获任何元素。

    我还对该方法进行了一些调整,以便计算平均正确率。

    这是一个例子

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        ArrayList <Integer> myArray = new ArrayList<>();
        int userInput = 0;
        String userConf = "";
        
        while ((!userConf.equalsIgnoreCase("y"))) {
            System.out.println("Please enter a number: ");
            
            userInput = scan.nextInt();
            myArray.add(userInput);
            
            scan.nextLine();
            System.out.println("Are you done entering numbers? (y/n): ");
            userConf = scan.nextLine();
        }
    
        System.out.println(myArray);
        double result = computeAvg(myArray);
        
        System.out.println("Average is: " + result);
    }
    
    
    public static double computeAvg(List <Integer> myArray) {
        double sum = 0;
        double avg = 0;
        
         for (int i = 0; i < myArray.size(); i++) {               
              sum = sum + myArray.get(i);
         }
         avg =  sum / myArray.size();
         return avg;    
    }
    

    输出

    我的列表 = [4,5]

    平均 = (4 + 5) / 2 (myArray.size())= 4.5

    希望有用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 2020-08-17
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      相关资源
      最近更新 更多