Вызов валидации из другого класса JAVA

Я работаю над проектом, который имеет 5 классов. Одним из которых является класс проверки. Я проверил данные в контрольном классе, но профессор хочет получить их в отдельном классе. Вот пример моего кода. Пользователь вводит информацию в токены. Работает нормально, но в классе контроллера я должен "вызвать" валидацию, которая имеет свой собственный класс. Как я должен кодировать это?

while (tkCustomer.hasMoreTokens()){

    //store each token in the corresponding variable
    //Make sure we format integers
    //variablename = tkCustomer.nextToken();
        firstName = tkCustomer.nextToken( );
        lastName = tkCustomer.nextToken ( ); 
        phone = tkCustomer.nextToken ( );
        nbrVehicle = Integer.parseInt(tkCustomer.nextToken( ));
        nbrTanks = Integer.parseInt(tkCustomer.nextToken( ));
    }

    //validate each data entered here
        int firstNameLength = firstName.length();

        if(firstNameLength == 0){

            String errorMessage = "Please Enter a Valid First Name";
            JOptionPane.showMessageDialog(null, errorMessage, "Invalid Name", JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        }else{
            int lastNameLength = lastName.length();

            if(lastNameLength == 0){

                String errorMesssage = "Please Enter a Valid Last Name";
                JOptionPane.showMessageDialog(null, errorMesssage, "Invalid Name", JOptionPane.ERROR_MESSAGE);
                System.exit(0);
        }else{
              int phoneLength = phone.length();

              if(phoneLength != 10) {
                  String errorMesssage = "Please Enter a Valid Phone Number";
                  JOptionPane.showMessageDialog(null, errorMesssage, "Invalid Phone Number", JOptionPane.ERROR_MESSAGE);
                  System.exit(0);
        }else{
            if(nbrVehicle < 1 || nbrVehicle > 10) {
                String errorMesssage = "Please Enter a Number Between 1 & 10 for Your Order of Vehicles";
                JOptionPane.showMessageDialog(null, errorMesssage, "Invalid Vehicle Order", JOptionPane.ERROR_MESSAGE);
                System.exit(0);
        }else{
             if(nbrTanks != 2 && nbrTanks != 4 && nbrTanks != 8 && nbrTanks != 10 && nbrTanks != 15 && nbrTanks != 20){

                 String errorMesssage = "Please Enter Either 2, 4, 8, 10, 15, or 20 for Your Order of Tanks";
                 JOptionPane.showMessageDialog(null, errorMesssage, "Invalid Number of Tanks", JOptionPane.ERROR_MESSAGE);
                 System.exit(0);

             }
        }
        }
        }
        }

Кроме того, программа аварийно завершает работу, как только пользователь выбирает определенную опцию, которая ему предоставляется. полный код класса управления приведен ниже. Во время первого раунда элементов токенизатора программа работает нормально. После второго раунда программа завершается с ошибкой:

Исключение в потоке "main" java.util.NoSuchElementException в java.util.StringTokenizer.nextToken(StringTokenizer.java:349) в project3example.HayloFactoryController.main(HayloFactoryController.java:126)

Я пробовал метод "пока есть больше токенов", но он просто отправляет программу в бесконечный цикл и может быть остановлен только кнопкой остановки.

Вот полный код класса управления:

package project3example;

import java.util.StringTokenizer;

import javax.swing.JOptionPane;

открытый класс HayloFactoryController {

/**
 * @param args
 */
public static void main(String[] args) {

    //create variables to hold information collected from the user

    String firstName = null;
    String lastName = null;
    String phone = "";
    int nbrTanks = 0;
    int nbrVehicle = 0;
    double total = 0;

    do{

        //collect the data entered by the user in 
        //variables
    String customerMessage = "Please enter the following separated by spaces"
            + "\n\n"
            + "- Customer First Name\n"
            + "- Customer Last Name\n"
            + "- Customer Phone\n"
            + "- Number of Vehicles\n"
            + "- Number of Tanks"
            + "\n\n"
            + "Example: Homer Simpson 9094559384 5 8\n\n"
            ;

        StringTokenizer tkCustomer = new StringTokenizer(
                JOptionPane.showInputDialog(customerMessage));

    while (tkCustomer.hasMoreTokens()){

    //store each token in the corresponding variable
    //Make sure we format integers
    //variablename = tkCustomer.nextToken();
        firstName = tkCustomer.nextToken( );
        lastName = tkCustomer.nextToken ( ); 
        phone = tkCustomer.nextToken ( );
        nbrVehicle = Integer.parseInt(tkCustomer.nextToken( ));
        nbrTanks = Integer.parseInt(tkCustomer.nextToken( ));
    }

    //validate each data entered here
        int firstNameLength = firstName.length();

        if(firstNameLength == 0){

            String errorMessage = "Please Enter a Valid First Name";
            JOptionPane.showMessageDialog(null, errorMessage, "Invalid Name", JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        }else{
            int lastNameLength = lastName.length();

            if(lastNameLength == 0){

                String errorMesssage = "Please Enter a Valid Last Name";
                JOptionPane.showMessageDialog(null, errorMesssage, "Invalid Name", JOptionPane.ERROR_MESSAGE);
                System.exit(0);
        }else{
              int phoneLength = phone.length();

              if(phoneLength != 10) {
                  String errorMesssage = "Please Enter a Valid Phone Number";
                  JOptionPane.showMessageDialog(null, errorMesssage, "Invalid Phone Number", JOptionPane.ERROR_MESSAGE);
                  System.exit(0);
        }else{
            if(nbrVehicle < 1 || nbrVehicle > 10) {
                String errorMesssage = "Please Enter a Number Between 1 & 10 for Your Order of Vehicles";
                JOptionPane.showMessageDialog(null, errorMesssage, "Invalid Vehicle Order", JOptionPane.ERROR_MESSAGE);
                System.exit(0);
        }else{
             if(nbrTanks != 2 && nbrTanks != 4 && nbrTanks != 8 && nbrTanks != 10 && nbrTanks != 15 && nbrTanks != 20){

                 String errorMesssage = "Please Enter Either 2, 4, 8, 10, 15, or 20 for Your Order of Tanks";
                 JOptionPane.showMessageDialog(null, errorMesssage, "Invalid Number of Tanks", JOptionPane.ERROR_MESSAGE);
                 System.exit(0);

             }
        }
        }
        }
        }




    //Create a customer Object
    //CustomerObject variableName = new CustomerObject(arguments)
        HayloCustomer customer = new HayloCustomer (firstName, lastName, phone, nbrVehicle, nbrTanks, total);

    //Present the customer with a choice of vehicles
        String[]  choices = {"EV-EX 4", "EV-EX 6", "EV-DX 9", "EV-DX 12", "EV-SX 13"};

    int response = JOptionPane.showOptionDialog(
            null                                        // center over parent
            , "Select a Vehicle type and Number of Fuel Cells"   // message
            , "Vehicle & Fuel Cell Selection"               // title in title bar
            , JOptionPane.YES_NO_OPTION                     // Option type
            , JOptionPane.PLAIN_MESSAGE                     // messageType
            , null                                          // icon
            , choices                                       // Options
            , "APS 24"                                      // initial value
    );
    //get the selection from the customer
        StringTokenizer tkVehicle= new StringTokenizer(choices[response]);

    //populate the vehicle variables
        String vehicleType;
        int nbrCells;
        int costVehicle;
        int tankCost; 

    //while (tkVehicle.hasMoreTokens());
        vehicleType = tkVehicle.nextToken();
        nbrCells = Integer.parseInt(tkVehicle.nextToken());
        costVehicle = Integer.parseInt(tkVehicle.nextToken());
        tankCost = Integer.parseInt(tkVehicle.nextToken());

    //Create our vehicle object
    //VehicleObject variableName = new VehicleObject(arguments)
        HayloVehicle vehicleFactory = new HayloVehicle(vehicleType, nbrCells, costVehicle, tankCost);

    //Create our factory object
    //FactoryObject factoryVariableName = new FactoryObject(customerObjectVariable, vehicleObjectVariable);
        HayloFactory factory = new HayloFactory(customer, vehicleFactory);

    //ask the object to process the order
    //factoryVariableName.process();

        customer.toString();
        vehicleFactory.toString();
        factory.process();
        factory.toString();

    //write code below to display the result for each order
    JOptionPane.showMessageDialog(null, factory.getSummary());

}while (JOptionPane.showConfirmDialog(null, "Enter More Orders?") == JOptionPane.YES_OPTION);

    //write code below to display the summary for all the orders
    JOptionPane.showMessageDialog(null, HayloFactory.salesSummary()); 
}

}

Любая помощь очень ценится! Начинающий здесь, с оценкой на линии!

1 ответ

Проще всего написать класс с логикой проверки в методе, который принимает в качестве аргумента объект customer (заполняет поле из Stken Tokenizer) и передает его методу. Проверка может быть выполнена в методе и назначить некоторый код ошибки / код успеха, чтобы вернуться из проверки и показать ошибку или успех, если это применимо. Есть много других способов разработки этого, но это, возможно, будет самым быстрым.

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