0
public class apples {

private static String[] level1 = new String[] { "A", "B", "I", "K", "N", "O", "P", "S", "T", "W" };



public static void main(String[] args) {

        int[] scores1 = { 99, 80, 56, 88, 70, 35, 67, 60, 78, 56 };

        int[] correct1 = {20, 20, 13, 15, 22, 18, 19, 21, 23, 25};

        int[] incorrect1 = {2, 1, 5, 2, 2, 5, 8, 1, 0, 0};


        double[] percentage1 = new double[correct1.length];
        for(int a = 0; a < correct1.length; a++ ){ 
                 percentage1[a] = (double)((correct1[a] / (correct1[a] + incorrect1[a]))*100);
            }


        System.out.println("Character \t Correct \t Incorrect \t Percentage");
            for(int counter = 0; counter<scores1.length;counter++){
                System.out.println(level1[counter] + "\t\t " + correct1[counter] + "\t\t " + incorrect1[counter] + "\t\t " + percentage1[counter]);
            }


}

}

これにより、4 つの見出しを持つテーブルが出力されます。文字列、正しい列、正しくない列が期待どおりに表示されます。ただし、パーセンテージ行は正しく機能していません。たとえば、文字「A」、正しい 20、間違った 2 のパーセンテージは 0.0 です。「正しくない」値 > 0 はパーセンテージ値 0 を出力し、「正しくない」値 = 0 はパーセンテージ値 100 を出力します (これは正しいです)...どこが間違っているのか説明してもらえますか?

4

3 に答える 3

1

ここで計算します

 percentage1[a] = (double)((correct1[a] / (correct1[a] + incorrect1[a]))*100);

整数除算を実行します (後で にキャストするだけですdouble)。実際の浮動小数点除算結果を返すようにする場合は、計算の前にすべてのオペランドを double にキャストする必要があります。

したがって、最速のオプションはこれを変更することです。

    double[] correct1 = {20, 20, 13, 15, 22, 18, 19, 21, 23, 25};

    double[] incorrect1 = {2, 1, 5, 2, 2, 5, 8, 1, 0, 0};

もう1つは、計算を次のように変更することです

percentage1[a] = (1.0 * correct1[a] / (correct1[a] + incorrect1[a]))*100;

または少し単純化するには:

percentage1[a] = 100.0 * correct1[a] / (correct1[a] + incorrect1[a]);
于 2013-04-14T13:22:07.360 に答える