简体   繁体   中英

Java cannot get user input from array

What am I trying to do here is basically a Java program displaying result slip.

Sometimes I get weird error which the program cannot display the output the properly.

import java.util.*;
import java.text.DecimalFormat;

 public class Assignment2
 {
 public static void main(String[] args)
 {
    Scanner sc = new Scanner(System.in);

    //variable declaration

    int totalsubjects;
    int totalcredithour = 0;

    double totalpointaccumulate=0;

    String name;
    String id;
    String program;

    //Decimal Formatting
    DecimalFormat df = new DecimalFormat("#,###,##0.00");

    //prompt for student information
    System.out.println("Please enter student's name: ");
    name = sc.nextLine();
    System.out.println("Please enter student's ID: ");
    id = sc.nextLine();
    System.out.println("Please enter student's program: ");
    program = sc.nextLine();
    System.out.println("Please enter how many subjects: ");
    totalsubjects = sc.nextInt();

    //arrays declaration
    String[] code = new String[totalsubjects];
    int[] credithour = new int[totalsubjects];
    double[] courseworkMark = new double[totalsubjects];
    double[] finalexamMark = new double[totalsubjects];
    double[] gpa = new double[totalsubjects];
    double[] totalMarks = new double[totalsubjects];
    char[] grade = new char[totalsubjects];
    double[] point = new double[totalsubjects];
    double[] totalpoint = new double[totalsubjects];

    //loop for each subject informations
    for(int i=0;i <code.length;i++)
    {
        System.out.println("Please enter subject code no "+(i+1)+":");
        code[i] = sc.next();
        System.out.println("Please enter credithour for subject no"+(i+1)+":");
        credithour[i]=sc.nextInt();
        System.out.println("Please enter the coursework mark for subject no"+(i+1)+":");
        courseworkMark[i] = sc.nextDouble();
        System.out.println("Please enter the final exam mark for subject no"+(i+1)+":");
        finalexamMark[i] = sc.nextDouble();
        totalMarks[i]=(courseworkMark[i]*0.6)+(finalexamMark[i]*0.4);
        totalcredithour = credithour[i] + totalcredithour;


        //Grade placement for each subject


        if (totalMarks[i]<= 100 && totalMarks[i]>=80)
        {
            grade[i] = 'A';
            point[i] = 4.0;
        }

        else if (totalMarks[i]>=60 && totalMarks[i] <=79)
        {
            grade[i] = 'B';
            point[i] = 3.0;
        }
        else if (totalMarks[i]>=59 && totalMarks[i] <=49)
        {
            grade[i] = 'C';
            point[i] = 2.0;
        }
        else if (totalMarks[i]>=0 && totalMarks[i] <=40)
        {
            grade[i] = 'F';
            point[i] = 0.0;
        }
        totalpoint[i] = point[i] * credithour[i];
        totalpointaccumulate = totalpoint[i] + totalpointaccumulate;

    }

    System.out.println("\t -x-");
    System.out.println("    Result Slip Semester January 2016");
    System.out.println("____________________________________________");
    System.out.println("Name   : "+name);
    System.out.println("ID     : "+id);
    System.out.println("Program: "+program);
    System.out.println("____________________________________________");
    System.out.println("                CrHr    Grade   Pt  TotalPt");
    System.out.println("--------------------------------------------");


    for(int k=0;k<code.length;k++)
    {
        System.out.println((k+1)+(".")+code[k] +("\t")+credithour[k]+("\t")+grade[k]+("\t")+point[k]+"\t"+totalpoint[k]);

    }

    System.out.println("--------------------------------------------");
    System.out.println("    Total"+"       "+totalcredithour+"                       " + totalpointaccumulate);

    System.out.println("                                      GPA: "+(df.format(totalpointaccumulate/totalcredithour)));


}

}

This is my sample input which produce error.

Please enter student's name:
KZK KKY
Please enter student's ID:
32423432
Please enter student's program:
BSE
Please enter how many subjects:
3
Please enter subject code no 1:
IGB4040
Please enter credithour for subject no1:
3
Please enter the coursework mark for subject no1:
70
Please enter the final exam mark for subject no1:
90
Please enter subject code no 2:
IGB3030
Please enter credithour for subject no2:
3
Please enter the coursework mark for subject no2:
50
Please enter the final exam mark for subject no2:
70
Please enter subject code no 3:
IGB2020
Please enter credithour for subject no3:
4
Please enter the coursework mark for subject no3:
60
Please enter the final exam mark for subject no3:
70 

The error output produced from sample input above. My question here is why the second subject on the result slip is empty while the first and third subject just worked fine? Is there any logic error(s) in my code?

Thanks in advance.

As discussed in comments, after examining the code, I see the line else if (totalMarks[i]>=59 && totalMarks[i] <=49) -- this will never be true; since the surrounding cases are >= 60 and <= 40, I assume this line would be else if (totalMarks[i]>=41 && totalMarks[i] <=59)

If I were you, I'd follow this fix up with a time investment in some debugging skills that are sure to help you identify small logic errors like this :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM