我在这里尝试做的基本上是一个显示结果单的Java程序。
有时我会得到奇怪的错误,程序无法正确显示输出。
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)));
}
}
这是我的示例输入产生错误。
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. 我的问题是为什么结果单上的第二个主题是空的而第一个和第三个主题正常工作?我的代码中是否有任何逻辑错误?
提前致谢。
答案 0 :(得分:1)
正如评论中所讨论的,在检查代码之后,我看到了行else if (totalMarks[i]>=59 && totalMarks[i] <=49)
- 这将永远不会成立;由于周围的情况是> = 60且<= 40,我假设这一行是else if (totalMarks[i]>=41 && totalMarks[i] <=59)
如果我是你,我会花时间投入一些调试技巧,这些技巧肯定可以帮助你找出像这样的小逻辑错误:)