我已经在这个程序上工作了几个小时,我无法弄清楚如何让程序从分数文本文件中实际打印成绩
public class Assign7{
private double finalScore;
private double private_quiz1;
private double private_quiz2;
private double private_midTerm;
private double private_final;
private final char grade;
public Assign7(double finalScore){
private_quiz1 = 1.25;
private_quiz2 = 1.25;
private_midTerm = 0.25;
private_final = 0.50;
if (finalScore >= 90) {
grade = 'A';
} else if (finalScore >= 80) {
grade = 'B';
} else if (finalScore >= 70) {
grade = 'C';
} else if (finalScore>= 60) {
grade = 'D';
} else {
grade = 'F';
}
}
public String toString(){
return finalScore+":"+private_quiz1+":"+private_quiz2+":"+private_midTerm+":"+private_final;
}
}
此代码编译以及此代码
import java.util.*;
import java.io.*;
public class Assign7Test{
public static void main(String[] args)throws Exception{
int q1,q2;
int m = 0;
int f = 0;
int Record ;
String name;
Scanner myIn = new Scanner( new File("scores.txt") );
System.out.println( myIn.nextLine() +" avg "+"letter");
while( myIn.hasNext() ){
name = myIn.next();
q1 = myIn.nextInt();
q2 = myIn.nextInt();
m = myIn.nextInt();
f = myIn.nextInt();
Record myR = new Record( name, q1,q2,m,f);
System.out.println(myR);
}
}
public static class Record {
public Record() {
}
public Record(String name, int q1, int q2, int m, int f)
{
}
}
}
一旦编译了代码,我就得到了这个代码,它精确地计算了我在scores.txt中的数字 名称quiz1 quiz2 midterm final avg letter
Assign7Test $记录@ 4bcc946b
Assign7Test $记录@ 642423
Exception in thread "main" java.until.InputMismatchException
at java.until.Scanner.throwFor(Unknown Source)
at java.until.Scanner.next(Unknown Source)
at java.until.Scanner.nextInt(Unknown Source)
at java.until.Scanner.nextInt(Unknown Source)
at Assign7Test.main(Assign7Test.java:25)
答案 0 :(得分:4)
除了例外,您实际上 打印Record
类型的对象。您需要做的是覆盖toString()
以提供对象的正确表示。
@Override
public String toString() {
return "Something meaningful about your Record object.";
}
我还注意到您使用nextLine()
中的System.out.println('...')
推进了扫描程序。您可能希望从代码中评论该部分。
答案 1 :(得分:0)
您收到此错误的原因是因为您需要一个整数,但扫描程序读取的下一个内容不是数字。
另外,将它放在记录的toString中以停止打印地址。
即
public static class Record {
public Record() {
}
public Record(String name, int q1, int q2, int m, int f)
{
}
public String toString(){}//print out stuff here.
}
答案 2 :(得分:0)
将您的记录更改为此类
public static class Record {
String name;
int q1;
int q2;
int m;
int f;
public Record() {}
public Record(String name, int q1, int q2, int m, int f) {
// here you save the given arguments localy in the Record.
this.name = name;
this.q1 = q1;
this.q2 = q2;
this.m = m;
this.f = f;
}
@Override
public String toString(){
//here you write out the localy saves variables.
//this function is called when you write System.out.println(myRecordInstance);
System.out.println(name + ":" + q1 + ":" + q2 + ":" + m + ":" + f);
}
}
它的作用:你必须通过创建记录来保存这些记录。
另外,如果要使用System.out.println(myRecordInstance),则必须覆盖toString方法;相反,您可以编写另一个函数在Record中返回一个String并打印出此函数的返回值,如System.out.println(myRecordInstace.writeMe());
然后您将该函数添加到记录中。
public String writeMe(){
System.out.println(name + ":" + q1 + ":" + q2 + ":" + m + ":" + f);
}