简体   繁体   English

我的 arraylist 尺寸为零,即使我已经向其中添加了项目

[英]My arraylist size is a zero even though I've added items to the it

So I tried looking up this error ( Exception in thread "main" java.lang.ArithmeticException: / by zero ) and figured that my arraylist size in the code below is zero.所以我尝试查找此错误( Exception in thread "main" java.lang.ArithmeticException: / by zero )并认为下面代码中的 arraylist 大小为零。 I can't understand why it is zero or how to solve it.我不明白为什么它为零或如何解决它。 Does it have to do something with the capacity of the array?它必须对阵列的容量做些什么吗? I can't seem to figure out what's wrong with my code.我似乎无法弄清楚我的代码有什么问题。

Btw, this code is for computing the average of all the elements in an arraylist and letting the user know what the average is.顺便说一句,此代码用于计算 arraylist 中所有元素的平均值,并让用户知道平均值是多少。

I'm still a beginner at Java so I apologize if this may seem silly.我仍然是 Java 的初学者,所以如果这看起来很愚蠢,我深表歉意。 Any help is appreciated!任何帮助表示赞赏!

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();    
    }

}

I'm assuming the lines:我假设这些行:

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

gets the amount of elements you want to add to the arraylist, which we later add to the list through the for loop.获取要添加到 arraylist 中的元素数量,我们稍后通过 for 循环将其添加到列表中。 In that case keep it in another variable called list_length , since userInput constantly changes in the for loop.在这种情况下,将其保存在另一个名为list_length的变量中,因为userInput在 for 循环中不断变化。

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

Then change the for loop after this input to something like:然后将此输入后的 for 循环更改为:

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

This is because you changed the end of the for loop to myArray.size() , but remember that it was already 0, so the for loop ends since 1 >= 0 .这是因为您将 for 循环的结尾更改为myArray.size() ,但请记住它已经是 0,因此 for 循环从1 >= 0开始结束。 What you probably wanted to do was to add list_length amount of numbers into the arraylist您可能想要做的是将list_length数量的数字添加到 arraylist

I found your problem.我发现了你的问题。

The problem was your for loop because somehow the arrayList didn't catch any of the elements during the loop.问题出在你的 for 循环上,因为 arrayList 在循环期间没有捕捉到任何元素。

I also made some adjustment for the method so it counts the average correct.我还对该方法进行了一些调整,以便计算平均值。

Here's an example这是一个例子

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;    
}

Output Output

myList = [4,5]我的列表 = [4,5]

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

Hope it was useful!希望它有用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 我已经将内容添加到ArrayList中,但仍无法用于循环和功能 - I've added things into my ArrayList but still not working for loop, and function 为什么即使我添加了JDK,“执行环境”部分中也没有兼容的JRE? - Why are there no compatible JREs in the Execution Environments section even though I've added a JDK? 为什么我的LibGDX项目没有从Overlap2D运行时看到Overlap2DStage类,即使我将其添加为Gradle依赖项也是如此? - Why isn't my LibGDX project seeing the Overlap2DStage class from the Overlap2D runtime, even though I've added it as a Gradle dependency? 按钮具有不同的大小,即使我给它们提供了相同的大小? - Buttons have different sizes even though i've given them the same size? 聊天没有被添加到 ArrayList 即使我可以看到它们被保存到 Firebase - Chats aren't being added to the ArrayList even though I can see that they are being saved to Firebase 我的 RecyclerView 适配器的 getItemCount() 返回 0,即使里面有项目 - getItemCount() of my RecyclerView adapter returns 0 even though I have items in it 为什么我的ORDS servlet不执行,即使我已遵循现有指南? - Why isn't my ORDS servlet executing, even though I've followed the existing guidelines? 为什么即使我只更改方法中的ArrayList而不更改原始ArrayList,我的原始arraylist仍要修改 - Why is my original arraylist amended even though I only make changes to my ArrayList within the method without changing the orignal ArrayList 即使添加项目,列表大小也为零 - List size is zero even after adding items 当我尝试添加ArrayList元素时,即使它是新的,为什么我的程序仍然存在? - Why does my program say the ArrayList element exists when I try to add it even though it's new?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM