-2

私は2つのクラスで働いています。1 つは Validator と呼ばれ、もう 1 つは LineItemApp と呼ばれます。

Validator クラスのコードは次のとおりです。

import java.util.Scanner;

public class Validator
{
public String getString(Scanner sc, String prompt)
{
    System.out.print(prompt);
    String s = sc.next();  // read user entry
    sc.nextLine();  // discard any other data entered on the line
    return s;
}

public int getInt(Scanner sc, String prompt)
{
    int i = 0;
    boolean isValid = false;
    while (isValid == false)
    {
        System.out.print(prompt);
        if (sc.hasNextInt())
        {
            i = sc.nextInt();
            isValid = true;
        }
        else
        {
            System.out.println("Error! Invalid integer value. Try again.");
        }
        sc.nextLine();  // discard any other data entered on the line
    }
    return i;
}

public int getInt(Scanner sc, String prompt,
int min, int max)
{
    int i = 0;
    boolean isValid = false;
    while (isValid == false)
    {
        i = getInt(sc, prompt);
        if (i <= min)
            System.out.println(
                "Error! Number must be greater than " + min + ".");
        else if (i >= max)
            System.out.println(
                "Error! Number must be less than " + max + ".");
        else
            isValid = true;
    }
    return i;
}

public double getDouble(Scanner sc, String prompt)
{
    double d = 0;
    boolean isValid = false;
    while (isValid == false)
    {
        System.out.print(prompt);
        if (sc.hasNextDouble())
        {
            d = sc.nextDouble();
            isValid = true;
        }
        else
        {
            System.out.println("Error! Invalid decimal value. Try again.");
        }
        sc.nextLine();  // discard any other data entered on the line
    }
    return d;
}

public double getDouble(Scanner sc, String prompt,
double min, double max)
{
    double d = 0;
    boolean isValid = false;
    while (isValid == false)
    {
        d = getDouble(sc, prompt);
        if (d <= min)
            System.out.println(
                "Error! Number must be greater than " + min + ".");
        else if (d >= max)
            System.out.println(
                "Error! Number must be less than " + max + ".");
        else
            isValid = true;
    }
    return d;
}
}

これが私の LineItemApp クラスです

    import java.util.Scanner;

public class LineItemApp
{
public static void main(String args[])
{
    // display a welcome message
    System.out.println("Welcome to the Line Item Calculator");
    System.out.println();

    // create 1 or more line items
    Scanner sc = new Scanner(System.in);
    String choice = "y";
    while (choice.equalsIgnoreCase("y"))
    {
        // get the input from the user
        String productCode = Validator.getString(sc,
            "Enter product code: ");
        int quantity = Validator.getInt(sc,
            "Enter quantity:     ", 0, 1000);

        // get the Product object
        Product product = ProductDB.getProduct(productCode);

        // create the LineItem object
        LineItem lineItem = new LineItem(product, quantity);

        // display the output
        System.out.println();
        System.out.println("LINE ITEM");
        System.out.println("Code:        " + product.getCode());
        System.out.println("Description: " + product.getDescription());
        System.out.println("Price:       " + product.getFormattedPrice());
        System.out.println("Quantity:    " + lineItem.getQuantity());
        System.out.println("Total:       " +
            lineItem.getFormattedTotal() + "\n");

        // see if the user wants to continue
        choice = Validator.getString(sc, "Continue? (y/n): ");
        System.out.println();
    }
}

}

どんな助けでも大歓迎です。

ありがとう、デビッド

4

3 に答える 3

2

メソッドを入力するには、Validator のインスタンスが必要です。

// see if the user wants to continue
    Validator validator = new Validator();
    choice = validator.getString(sc, "Continue? (y/n): ");
    System.out.println();

または、別の回答で示唆されているように、バリデーターメソッドを静的にすることができますが、この変更は確かに大きく、コードを変更する必要があり、このバリデーターを別の部分で使用するかどうかがわからないため、同意しませんが、リファクタリングする場合それは、クラス Validator に stateがなく、いくつかのアルゴリズムのみを実行するため、まったく悪い考えではありません。

于 2013-07-17T01:49:28.670 に答える
1

静的メソッド (現在は main() ) から非静的メソッドを呼び出しています。

警告が発生するメソッドを静的に宣言することで、エラーを排除できます。

于 2013-07-17T01:49:40.480 に答える
0

静的メソッドとは何かを理解する必要があります。 http://www.leepoint.net/notes-java/flow/methods/50static-methods.html

于 2013-07-17T02:00:29.877 に答える