Java~請幫我除錯<arrayList>

這個程式是要決定arrayList裡面的數字是add 還是even numbers(perfect number是加分題, 如果有人會的話幫我加上更好~)

總之output應該是:

[5, 12, 9, 6, 1, 4, 8, 6]

# of even #s - 5

# of odd #s - 3

# of perfect #s - 2

[5, 12, 3, 7, 28, 496, 81, 65, 33, 11]

# of even #s - 3

# of odd #s - 7

# of perfect #s - 2

可是目前我的code執行出來全部都是0, 請java高手幫我看看吧, 謝謝!!

code如下:

import java.io.File;

import java.io.IOException;

import java.util.Scanner;

import java.util.ArrayList;

import java.util.Collections;

import static java.lang.System.*;

class NumberAnalyzer

{

private ArrayList<Integer> list;

private int evenCount;

private int oddCount;

private int perfectCount;

public NumberAnalyzer()

{

list=new ArrayList<Integer>();

evenCount=oddCount=perfectCount=0;

}

public NumberAnalyzer(String numbers)

{

list=new ArrayList<Integer>();

Scanner scan = new Scanner(numbers);

while (scan.hasNext())

{

list.add(Integer.parseInt(scan.next()));

}

}

public void countOdds()

{

int oddCount=0;

for (int x =0;x<list.size();x++)

{

if (list.get(x)%2!=0)

oddCount++;

}

}

private boolean isOdd(int num)

{

return false;

}

public void countEvens()

{

int evenCount = 0;

for (int x = 0;x<list.size();x++)

{

if (list.get(x)%2!=1)

evenCount++;

}

}

private boolean isEven(int num)

{

return false;

}

public void countPerfects()

{

}

private boolean isPerfect(int num)

{

int total=0;

return false;

}

public String toString( )

{

return list

+ "\n# of even #s - " + evenCount

+ "\n# of odd #s - " + oddCount

+ "\n# of perfect #s - " + perfectCount + "\n\n";

}

}

public class Lab21b

{

public static void main( String args[] )

{

NumberAnalyzer test = new NumberAnalyzer("5 12 9 6 1 4 8 6");

test.countOdds();

test.countEvens();

test.countPerfects();

out.println(test);

test = new NumberAnalyzer("5 12 3 7 28 496 81 65 33 11");

test.countOdds();

test.countEvens();

test.countPerfects();

out.println(test);

}

}

1 個解答

評分
  • 1 0 年前
    最佳解答

    您好:

    一、完美數部份

    countPerfects(), isPerfect() 是使用既有的 method。

    /**

    * 計算完美數的數目。<Br>

    */

    public void countPerfects() {

    // 計算完美數數目

    perfectCount = 0;

    for (int i = 0, size = this.list.size(); i < size; i++) {

    Integer temp = this.list.get(i);

    if (this.isPerfect(temp.intValue())) {

    perfectCount++;

    }

    }

    }

    /**

    * 判斷是否完美數。<br>

    * 當自身以外的因數加總等於自身,則為完美數。

    * @param num int

    * @return boolean

    */

    private boolean isPerfect(int num) {

    if (num <= 1) {

    return false;

    }

    int total = 1;

    // 加總真因數

    for (int i = 2; i <= num / 2; i++) {

    if (num % i == 0) {

    total += i;

    }

    }

    return num == total;

    }

    二、計算奇偶結果為0的部分,主要是因為在 countEvens(), countOdds() 中,分別多宣告了底下的區域變數。

     int evenCount = 0;

    以及

     int oddCount = 0;

    上列區域變數會導致計算時不正確。移除掉應可正確運算。或許您是想替變數歸零。若是如此,則不必使用到宣告。如:

     evenCount = 0;

    本回答中的數學定義參考了下列網站:

    1.良葛格學習筆記

    http://caterpillar.onlyfun.net/Gossip/AlgorithmGos...

    2.白啟光先生的數學嘉年華

    http://xserve.math.nctu.edu.tw/people/cpai/carniva...

    2007-02-06 11:46:15 補充:

    假如輸入的數字相當多,且數字較大(甚至輸入的數字大多重複的情形)。為了追求效率,或許可以先計算一定範圍內的所有完美數。然後再使用已經算出的完美數來比對。

    這樣可以避免重複計算是否完美數。

    不過,話說回來,我剛剛才知道10000以內完美數只有4個....

    分別是 6,28,496,8128。呵,數學真是有趣 XD

還有問題?馬上發問,尋求解答。