0

私のプログラム (以下に含まれます) は、リストのサイズがゼロであるというこのエラーを出し続け、他のすべてを台無しにしています。これは、要素を正しく追加しなかったことを意味すると推測していますが、何が問題なのかわかりません。私は技術的に問題があるので、これが正しくフォーマットされていなくて申し訳ありません。ご協力いただきありがとうございます!

import java.util.Scanner;
import java.util.ArrayList;
public class ListStat {
    public static void main (String[] args) {
        ListStat r = new ListStat();
        System.out.println("A default list was created." + r.toString());
        ListStat r1 = new ListStat(30);
        System.out.println("Another list was created." + r1.toString());
        ListStat r2 = new ListStat(40);
        System.out.println("Another list was created." + r2.toString());
        r1.add(4); 
        System.out.println("The item at index 13 for r1 is: " + r1.get(13));
        System.out.println("r1 and r2 are equal: " + r1.equals(r2));
        System.out.println("r1 and r2 overlap this number of times: " + r1.countOverlap(r1, r2));
    }

private ArrayList<Integer> list;

public ListStat() {
list = new ArrayList<Integer>();
}

public ListStat(int N) {
list = new ArrayList<Integer>(N);
for (int i=0; i<N; i++) {
    list.add(i, i+1);
}
}

public void add(int num) {
list.add(num);
}

public int get(int index) {
return list.get(index);
}

public int getListLength(){
return list.size();
}

public double getMean() {
int sum = 0;
for (int i=0; i<list.size(); i++) {
    sum = sum + list.get(i);
}
double mean = sum/list.size();
return mean;
}

public int getSum() {
int sum = 0;
for (int i=0; i<list.size(); i++) {
    sum = sum + list.get(i);
}
return sum;
}

public boolean equals(ListStat r) {
if (r.equals(list))
return true;
else
return false;
}

public static int countOverlap(ListStat r1, ListStat r2) {
int count = 0;
for (int i=0; i<r1.getListLength(); i++) {
    for (int j=0; j<r2.getListLength(); j++) {
        if (r1.get(i)==r2.get(j)) {
            count++;
        }
    }
}
return count;
}

public double getStdDev() {
int sum = 0;
double standardDev = 0.0;
for (int i=0; i<list.size(); i++) {
    sum = sum + list.get(i);
}
double mean = sum/list.size();
double standsum=0;
for (int i=0; i<list.size(); i++) {
    standardDev = (list.get(i) - mean) * (list.get(i) - mean);
    standsum=standsum+standardDev;
}
standsum = standsum/list.size();
standsum = Math.sqrt(standsum);
return standsum;
}

public String toString() {
return "The list length is " + getListLength() + ", the mean is " + getMean() + ", the sum is " + getSum() + ", and the standard deviation is " + getStdDev();  
}
}
4

2 に答える 2

2

あなたの主な方法では、

まず、引数なしのコンストラクターを呼び出します

ListStat r = new ListStat();    

以下は、引数のないコンストラクターがどのように見えるかです。

public ListStat() {
    list = new ArrayList<Integer>();
}

リストを初期化しますが、リストには何も追加しないため、リストのサイズは 0 です。

第二に、次のとおりです

System.out.println("A default list was created." + r.toString());

メソッドを呼び出していtoStringます。

toStringメソッドを見ると

public String toString() {
    return "The list length is " + getListLength() + ", the mean is " + getMean() + ", the sum is " + getSum() + ", and the standard deviation is " + getStdDev();
}

getMeanmethod はそこで呼び出しているものであり、そのメソッドで行っていることは次のとおりです。

double mean = sum / list.size();

リストサイズは0です。

そのため、その前にリスト サイズが 0 かどうかを確認するために、そこに条件チェックを追加することをお勧めします。

于 2012-11-13T03:36:53.663 に答える
2

問題の原因は

double mean = sum / list.size();

getMean() メソッドで。

  1. プログラムは空のオブジェクト r を作成します。

    r.サイズ() = 0;

  2. 次に、9 行目で r.toString() メソッドを呼び出します。このメソッドは getMean() を呼び出します。r.size は 0 なので、プログラムは例外をスローします

スレッド「メイン」での例外 java.lang.ArithmeticException: / by zero

于 2012-11-13T03:43:44.053 に答える