2017-02-05 2 views
-5

Whe Я пытаюсь выполнить программу, используя этот код. Я получаю входные данные Incompatible types, которые не могут быть преобразованы в ошибку сканера. Где могла быть проблема?Java Несовместимые типы: входной поток не может быть преобразован в сканер

private ArrayList<Student> readFile() throws FileNotFoundException { 
      readOnCampusStudent (in) ArrayList<Student> studentList = new ArrayList<Student>(); 
      //info.add(type, id, lname, fname, resstat, prfee, credits); 
      String fName = "p02-students.txt"; 
      Scanner in = new Scanner(new File(fName)); 
      String studentType; 
      while (in.hasNext()) { 
       // studentList.add(type, id, lname, fname, resstat, prfee, credits); 
       if ("C".equals(in.next())) { 
        studentList.add(readOnCampusStudent(in)); 
       } 
       studentList.add(readOnlineStudent(in)); 
       in.nextLine(); 
      } 
      in.close(); 
      return studentList; 
     } 

Программа имеет четыре класса

MainClass
public class Main { 
     public static void main(String[] args) { 
      new Main().run(); 
     } 

     private onlineStudent readOnlineStudent(Scanner pIn) { 
      int id; 
      String lname, fname; 
      id = pIn.nextInt(); 
      lname = pIn.next(); 
      fname = pIn.next(); 
      onlineStudent OnlineStudent = new onlineStudent(id, fname, lname) { 
       @Override 
       public void calcTuition() 
       { 
       }   
      }; 
      return OnlineStudent; 
     } 

     private void calcTuition(ArrayList<Student> pStudentList) { 
      for (Student s : pStudentList) { 
       s.calcTuition(); 
      } 
     } 

     private void run() { 
      ArrayList<Student> studentList = new ArrayList<Student>(); 
      try { 
       studentList = readFile(); 
       calcTuition(studentList); 
       Sorter.insertionSort(studentList, Sorter.SORT_ASCENDING); 
       writeFile(studentList); 
      } catch (FileNotFoundException e) 
      { 
       System.err.println("Sorry, could not open 'p02-students.txt' for reading."); 
       System.exit(-1); 
      } 
     } 

     private onCampusStudent readOnCampusStudent(Scanner pIn) { 
      int id = pIn.nextInt(); 
      String lname = pIn.next(); 
      String fname = pIn.next(); 
      onCampusStudent OnCampusStudent = new onCampusStudent(id, fname, lname) { 
       @Override 
       public void calcTuition() { 
       } 
      }; 
      String res = pIn.next(); 
      double fee = pIn.nextDouble(); 
      int credits = pIn.nextInt(); 
      if (res.equals("R")) { 
       OnCampusStudent.setResidency(true); 
      } else { 
       OnCampusStudent.setResidency(false); 
      } 
      OnCampusStudent.setProgramFee(fee); 
      OnCampusStudent.setCredits(credits); 
      return OnCampusStudent; 
     } 

     private ArrayList<Student> readFile() throws FileNotFoundException { 
      readOnCampusStudent (in) ArrayList<Student> studentList = new ArrayList<Student>(); 
      //info.add(type, id, lname, fname, resstat, prfee, credits); 
      String fName = "p02-students.txt"; 
      Scanner in = new Scanner(new File(fName)); 
      String studentType; 
      while (in.hasNext()) { 
       // studentList.add(type, id, lname, fname, resstat, prfee, credits); 
       if ("C".equals(in.next())) { 
        studentList.add(readOnCampusStudent(in)); 
       } 
       studentList.add(readOnlineStudent(in)); 
       in.nextLine(); 
      } 
      in.close(); 
      return studentList; 
     } 

     private void writeFile(ArrayList<Student> pStudentList) throws FileNotFoundException { 
      File file = new File("p02-tuition.txt"); 
      PrintWriter out = new PrintWriter(file); 
      for (Student s : pStudentList) { 
       out.print(s.getId() + " " + s.getLName() + " " + s.getFName()); 
       out.printf("%.2f%n", s.getTuition()); 
      } 
      out.close(); 
     } 
    } 

Студент класса с 2 подклассов

public abstract class Student implements Comparable<Student> { 
     private int mCredits; 
     private String mFname; 
     private String mLname; 
     private int mId; 
     private double mTuition; 

     public Student(int pId, String pFname, String pLname) { 
      mId=pId; 
      mFname = pFname; 
      mLname = pLname; 
     } 

    //Implement this method in the subclass 
    //of student class 
     public abstract void calcTuition(); 

    //Set credits of student 
     public void setCredits(int pCredits) { 
      mCredits = pCredits; 
     } 

    //Returns the credits of student 
     public int getCredits() { 
      return mCredits; 
     } 

    //Set first name 
     public void setFname(String pFname) { 
      mFname = pFname; 
     } 

    //Returns first name 
     public String getFirstName() { 
      return mFname; 
     } 

    //Set id 
     public void setid(int pId) { 
      mId = pId; 
     } 

    //Retunrns id 
     public int getid() { 
      return mId; 
     } 

    //Set last name 
     public void setLname(String pLname) { 
      mLname = pLname; 
     } 

    //Returns last name 
     public String getLastName() { 
      return mLname; 
     } 

    //Returns the tuition fee 
     public void setTuition(double pTuition) { 
      mTuition = pTuition; 
     } 

    //Returns the tuition fee 
     public double getTuition() { 
      return mTuition; 
     } 

     @Override 
     public int compareTo(Student pStudnet) { 
      if (getid() < pStudnet.getid()) { 
       return -1; 
      } else if (getid() > pStudnet.getid()) { 
       return 1; 
      } else { 
       return 0; 
      } 
     } 

     int getId() { 
      return mId; 
     } 

     String getLName() { 
      return mLname; 
     } 

     String getFName() { 
      return mFname; 
     } 

     void setResidency(boolean b) { 
     } 

     void setProgramFee(double fee) { 
     } 
    } 

    abstract class onCampusStudent extends Student 
    { 
     boolean mResident; 
     double mProgramFee; 

     onCampusStudent(int pId, String pFname, String pLname) 
     { 
      super(pId,pFname,pLname); 
     } 
    } 

    abstract class onlineStudent extends Student 
    { 
     boolean mResident; 
     double mProgramFee; 

     onlineStudent(int pId, String pFname, String pLname) 
     { 
      super(pId,pFname,pLname); 
     } 
    } 

сортировщик класса

public class Sorter { 

    public static final int SORT_ASCENDING = 0; 
    public static final int SORT_DESCENDING = 1; 

    /** 
    * Sorts pList into ascending (pOrder = SORT_ASCENDING) or descending 
    * (pOrder = SORT_DESCENDING) order using the insertion sort algorithm. 
    */ 
    public static void insertionSort(ArrayList<Student> pList, int pOrder) { 
     for (int i = 1; i < pList.size(); ++i) { 
      for (int j = i; keepMoving(pList, j, pOrder); --j) { 
       swap(pList, j, j - 1); 
      } 
     } 
    } 

    /** 
    * Returns true if we need to continue moving the element at pIndex until it 
    * reaches its proper location. 
    */ 
    private static boolean keepMoving(ArrayList<Student> pList, int pIndex, int pOrder) { 
     if (pIndex < 1) { 
      return false; 
     } 
     Student after = pList.get(pIndex); 
     Student before = pList.get(pIndex - 1); 
     return (pOrder == SORT_ASCENDING) ? after.compareTo(before) < 0 : after.compareTo(before) > 0; 
    } 

    /** 
    * Swaps the elements in pList at pIndex1 and pIndex2. 
    */ 
    private static void swap(ArrayList<Student> pList, int pIndex1, int pIndex2) { 
     Student temp = pList.get(pIndex1); 
     pList.set(pIndex1, pList.get(pIndex2)); 
     pList.set(pIndex2, temp); 
    } 
} 

TuitionConstants Класс

public class TuitionConstants { 
    public static final int ONCAMP_ADD_CREDITS = 350; 
    public static final int MAX_CREDITS = 18; 
    public static final int ONCAMP_NONRES_BASE = 12200; 
    public static final int ONCAMP_RES_BASE = 5500; 
    public static final int ONLINE_CREDIT_RATE = 875; 
    public static final int ONLINE_TECH_FEE = 125; 
} 

p02-students.txt

C 823Flintstone Fred R 0 12 
C 3873472785863 Simpson Lisa N 750 18 
C 4834324308675 Jetson George R 0 20 
O 1384349045225 Szyslak Moe - 6 
O 5627238253456 Flanders Ned T 3 
+0

вопрос непонятен, просьба добавить более подробную информацию. – CRazyProgrammer

+0

У вас больше проблем, чем просто несовместимых типов в вашем коде ... –

+0

'readOnCampusStudent (in) ArrayList studentList = new ArrayList ();' - Какая черта эта строка? –

ответ

0
private ArrayList<Student> readFile() throws FileNotFoundException { 

     String fName = "p02-students.txt"; 

     Scanner scan = new Scanner(new File(fName)); 

     ArrayList<Student> studentList = new ArrayList<Student>(); 

     while (scan.hasNext()) { 

      String studentType = scan.next(); 

      if (studentType.equals("C")) { 
       studentList.add(readOnCampusStudent(scan)); 
      } else { 
       studentList.add(readOnlineStudent(scan)); 
      } 

      scan.nextLine(); 
     } 

     scan.close(); 
     return studentList; 
    } 

я не получаю ошибку вы упомянули раньше, но я получаю сообщение об ошибке ввода несоответствия, потому что вы не читаете данные правильно.

Например, вы пытались сохранить «823» в переменной int. Согласно стандарту java значение int переменной должно быть между 2147483647 и -2147483648. Поэтому я бы предложил вам использовать длинную переменную типа или другую переменную типа String для ее сохранения.

private onCampusStudent readOnCampusStudent(Scanner pIn) { 

     String id = pIn.next(); 

     String lname = pIn.next(); 

     String fname = pIn.next(); 

     System.out.println(id + " " + lname + " " + fname); 
    } 

Я распечатал значения, и он отлично работал для каждого учащегося. Не забудьте изменить тип данных mid переменная в классе ученика.

+0

дайте мне знать, если вы все еще сталкиваетесь с проблемой. – CRazyProgrammer

+0

Большое вам спасибо. Это решило ошибки. Я также получил ошибку несоответствия ввода, и я сделал, как вы посоветовали. Теперь я собираюсь идти. – Jarajanta

+0

Не забудьте проголосовать за ответ. :) – CRazyProgrammer

0

Эти строки кода как в главном классе:

import static java.lang.System.in;

Scanner in = new Scanner(new File(fName));

вы есть две вещи, которые называются «in». Вероятно, это вызывает ошибку - возникает недоумение относительно того, является ли это импортированным «in» (который является InputStream) или переменной «in» (который является сканером). Я предлагаю вам не импортировать java.lang.System .in и просто введите System.in, если вы хотите использовать его. Тогда это не будет противоречить вашей переменной.

+0

В качестве альтернативы, можно переименовать переменную таким образом это не называется «in». –

+0

Благодарим вас за помощь. – Jarajanta

Смежные вопросы