0

丸め方に問題があります。なぜかtestP10位まで丸められない。たとえば、最初の例 (Alex Smith) では 82.0 という答えが得られますが、82.6 である必要があります。

例を含む割り当ては次のとおりです。 http://www.hpcodewars.org/past/cw5/problems/Average.htm

import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.math.*;
import java.util.Scanner;


public class Average {
        public static void main(String[] args) {
                int num = 0, temp =0;;
                String fileName="AverageInput.txt";
                String fileName2="AverageOutput.txt";
                Scanner inputStream = null;
                PrintWriter outputStream = null;
                double homeworkP = 0;

                //read
                try{
                        inputStream = new Scanner(new File(fileName)); //try to open the file
                }
                catch(Exception e){
                        System.out.println("Could not open the file named "+ fileName); // if it doesn't find it, tell them
                        System.exit(0);  // and then exit.
                }
                //write
                try{
                        outputStream = new PrintWriter(new FileOutputStream(fileName2,true)); //try to create the file
                }
                catch(Exception e){
                        System.out.println("Could not open the file named "+ fileName2); // if it doesn't find it, tell them
                        System.exit(0);  // and then exit.
                }


                int numH = inputStream.nextInt();
                int numT = inputStream.nextInt();
                int[] arrayH = new int[numH];
                outputStream.println("Averages");
                String blank = inputStream.nextLine();
                while (inputStream.hasNextLine()){
                        String line = inputStream.nextLine().replaceAll(" H","").replaceAll(" T","");
                        String[] nameParts = line.split(" ");
                        String name = nameParts[0] +" "+ nameParts[1];
                                        for (int i =0, p=2; i < numH; i++, p++){     //collects homework grades.
                                                arrayH[i] = Integer.valueOf(nameParts[p]);
                                                temp = temp + arrayH[i];
                                        }
                                        homeworkP = (temp - arrayMin(arrayH))/(numH-1) ; //gets percentage as rounded decimal.
                                        //System.out.println("homeP: " + homeworkP);
                                        temp =0;
                                        num = 0;
                                        for (int p = numH; p < numT + numH; p++){      //collects test grades.
                                                        num = num + Integer.valueOf(nameParts[p]);
                                        }
                                        double testP =num/numT; //gets percentage as decimal.
                                        System.out.println("homep: "+ homeworkP + "TestP: "+ testP);
                                        double TotalP = (homeworkP * 40) + (testP * 60);
                                        System.out.println(name + " " + TotalP);
                }
                        outputStream.close();
                        inputStream.close();
        }


        public static int arrayMin(int[] arr) {
            int i = 0;
            int min = Integer.MAX_VALUE;
            if (arr == null) {
                return 0;
            } else {
                while (i < arr.length) {
                    if (arr[i] < min) {
                      min = arr[i];
                    }
                    i++;
                }
            }
            return min;
        }
}
4

1 に答える 1

5

変化する

double testP =num/numT;

double testP = ((double) num) / numT;

numと同じようnumTint、現在、整数除算があり、これは...0の代わりになります。0.xyz

于 2013-05-09T20:50:15.567 に答える