Как определить, содержит ли входной файл определенные поля

У меня есть этот код, который должен определить, содержит ли какая-либо строка в моем входном файле имя, фамилия или оценка. Затем ему необходимо создать значимое исключение для неверной строки. У меня проблемы с настройкой моего оператора if для определения того, что находится в каждой строке. Я знаю, что inputFile.next читает только одно слово за раз, и я почти уверен, что мне нужно создать другую переменную для всей строки и включить inputFile.nextLine. Если я беру имя или оценку из своего входного файла, он генерирует исключение ArrayOutOfBounds, потому что он хочет увидеть три слова. Думаю, я действительно пытаюсь спросить, как мне проверить, содержит ли какая-либо строка три слова. Вот образец моего кода ...

(Закомментированная часть кода - это еще одна часть задания, которая должна проверять, находится ли какая-либо оценка за пределами от 0 до 100, и генерировать исключение, если это так, эта часть должна работать нормально.)

Мой входной файл:

Майк Тони 98,7

Мэри Том 65,8

Энн Томас 95,1

Алекс Райдер 178.6

package classwork11_2;

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;


public class Classwork11_2 {

public static void main(String[] args)throws IOException{


    File input = new File("students.txt");

    Scanner inputFile = new Scanner(input);
    PrintWriter output = new PrintWriter("average.txt");

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

    double average = 0;
    String name = "";
    String header = "Average:";
    double sum = 0;

    while(inputFile.hasNext()){

        String firstLine = inputFile.nextLine();
        String[] word = firstLine.split(" ");

        String fName = inputFile.next();
        String lName = inputFile.next();
        String grades = inputFile.next();

        try{
         /*double g = Double.parseDouble(grades);
         if(g < 0 || g > 100)
            throw new MyException(g);*/

          if(word[0] == null || word[1] == null || word[2] == null)
              throw new MyException("The names don't exist");
      }
        catch(MyException e){

          System.out.println("Parsing line with " + fName + " " + lName + " 
" + grades + " gave the following error: " + e.getMessage());
    }

        Student student = new Student(fName, lName, grades);
        array.add(student);
        name += student.getfName() + " " + student.getlName() + ", ";

    }
    for(Student i : array){

        double num = Double.parseDouble(i.getGrade());
        sum += num;
        average = sum / array.size();
    }

    System.out.println(name.substring(0, name.length()-2));
    System.out.printf("%-15s%10.1f\n", header, average);
    inputFile.close();
    output.close();

}
}

Мой класс исключения:

    package chapter11_homework;


public class InvalidStringException extends Exception{


    public InvalidStringException(String msg){

        super(msg);
    }
}
JOptionPane.showMessageDialog(null, String.format("Amount paid should be: $%.2f\n",calcWage(sum, hourRate)));
Eran 26.10.2018 08:25

Спасибо!! Я новичок в Java и методах, это сработало отлично!

Matt L. 26.10.2018 08:34
1
2
104
1

Ответы 1

Вы вызвали метод calcWage, но ничего не сделали с возвращаемым им значением. Вы можете сохранить это значение в переменной, а затем распечатать переменную:

double wage = calcWage(sum, hourRate);
JOptionPane.showMessageDialog(null, String.format("Amount paid should be: $%.2f\n",wage));

Или вы можете напрямую распечатать значение, возвращаемое методом:

JOptionPane.showMessageDialog(null, String.format("Amount paid should be: $%.2f\n",calcWage(sum, hourRate)));

Другие вопросы по теме