pasito15
pasito15

Reputation: 111

Java program grading

I've been working on this program for hours and I can't figure out how to get the program to actually print the grades from the scores Text file

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;

  }
} 

this code compiles as well as this one

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)
       { 

       } 
   } 
}

once a compile the code i get this which dosent exactly compute the numbers I have in the scores.txt Name quiz1 quiz2 midterm final avg letter

Assign7Test$Record@4bcc946b

Assign7Test$Record@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)

Upvotes: 0

Views: 2212

Answers (3)

Simulant
Simulant

Reputation: 20122

change your Record to something like this

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);
}

}

What it does: you have to save the argments by creating the Record. Additional you have to override the toString method if you want to use System.out.println(myRecordInstance); instead you could write an other function returning a String in your Record and print out the return values of this function like System.out.println(myRecordInstace.writeMe()); Then you ne to add the function to the record.

public String writeMe(){
System.out.println(name + ":" + q1 + ":" + q2 + ":" + m + ":" + f);
}

Upvotes: 0

nook
nook

Reputation: 2396

The reason you are getting this error is because of the fact that you are expecting an integer, but the next thing your scanner reads is not a number.

Also, put this in your toString of your record to stop printing out addresses.

i.e.

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.

}

Upvotes: 0

Makoto
Makoto

Reputation: 106470

Exception aside, you actually are printing objects of type Record. What you would need to do is override toString() to provide a decent representation of your object.

@Override
public String toString() {
    return "Something meaningful about your Record object.";
}

I also note that you're advancing the Scanner by use of nextLine() in System.out.println('...'). You may want to comment that part out of your code.

Upvotes: 4

Related Questions