Rounding error gives me invalid answer

烂漫一生 提交于 2019-12-25 01:44:47

问题


I'm having a problem with rounding. For some reason I can't round testP to the tenth place. For example, on the first given example (Alex Smith) it gives me the answer of 82.0, but it should be 82.6.

Here is the assignment that has the examples: 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;
        }
}

回答1:


Change

double testP =num/numT;

to

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

As num and numT are int, you currently have a integer division, which will be 0 instead of 0.xyz...



来源:https://stackoverflow.com/questions/16470851/rounding-error-gives-me-invalid-answer

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!