运行一次后如何使程序仍然运行

时间:2019-05-27 04:13:48

标签: java

我写了一个会干扰用户的程序。但是,它只能运行一次。我希望我的程序在用户输入“ q”或“ Q”之前一直运行。到目前为止,我写了这个:

import java.util.Scanner;
public class isbn {
    public static boolean validISBN(String isbnNumber) {
        isbnNumber = isbnNumber.replace("-", "").trim();
        if (isbnNumber.length() == 10 && isbnNumber.matches("[0-9]+")) {
            int sum = 0;
            for(int i = 10; i > 0; i--) {
                if (isbnNumber.charAt(9) == 'X' && i == 1) {
                    sum += i * 10;
                } else {
                    sum += i * Character.getNumericValue(isbnNumber.charAt(10 - i));
                }
            }
            if (sum % 11 == 0) {
                System.out.println("Valid");
            } else {
                System.out.println("Invalid");
            }
        }
        return false;
    }
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        System.out.print("Input ISBN Number: ");
        String isbnNumber = keyboard.next();
        validISBN(isbnNumber);
    }
} 

3 个答案:

答案 0 :(得分:2)

添加一个循环,以检查用户是否输入“ q”或“ Q”

import java.util.Scanner;

public class isbn {

    public static boolean validISBN(String isbnNumber) {
        isbnNumber = isbnNumber.replace("-", "").trim();
        if (isbnNumber.length() == 10 && isbnNumber.matches("[0-9]+")) {
            int sum = 0;
            for (int i = 10; i > 0; i--) {
                if (isbnNumber.charAt(9) == 'X' && i == 1) {
                    sum += i * 10;
                } else {
                    sum += i * Character.getNumericValue(isbnNumber.charAt(10 - i));
                }
            }
            if (sum % 11 == 0) {
                System.out.println("Valid");
            } else {
                System.out.println("Invalid");
            }
        }
        return false;
    }

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        String isbnNumber;
        do {
            System.out.print("Input ISBN Number: ");
            isbnNumber = keyboard.next();
            validISBN(isbnNumber);
            if ("q".equalsIgnoreCase(isbnNumber)) {
                break;
            }
        } while (true);
    }
}

答案 1 :(得分:0)

您可以使用无限循环并每次检查输入。如果输入是q或Q,则中断循环。

String input = null;
while(true) {
  input = keyboard.next();
  if("q".equalsIgnoreCase(input)) break;
  validISBN(isbnNumber);
}

答案 2 :(得分:0)

就像其他答案一样,您需要使用一个循环来等待用户输入。您可以使用java.util.Scanner#hasNext()方法并在while循环中对其进行评估。

这是Javadoc的摘录:

  

如果此扫描仪的输入中包含另一个令牌,则返回true。等待输入扫描时,此方法可能会阻塞。扫描仪不会前进超过任何输入

这是实际的实现:

import java.util.Scanner;

public class Main {

public static final Scanner READER = new Scanner(System.in);

public static boolean validISBN(String isbnNumber) {

    isbnNumber = isbnNumber.replace("-", "").trim();
    if (isbnNumber.length() == 10 && isbnNumber.matches("[0-9]+"))
    {
        int sum = 0;
        for(int i = 10; i > 0; i--) {
            if (isbnNumber.charAt(9) == 'X' && i == 1) {
                sum += i * 10;
            } else {
                sum += i * Character.getNumericValue(isbnNumber.charAt(10 - i));
            }
        }
        return sum % 11 == 0;
    }
    return false;
}

public static String getISBN() {

    System.out.println("Input ISBN number: ");
    while (READER.hasNext())
    {
        String input = READER.next();
        if (input.equalsIgnoreCase("q")) {
            System.out.println("Exiting application...");
            System.exit(0);
        }
        else if (validISBN(input)) {
            System.out.println("Your ISBN has been accepted.");
            return input;
        }
        else {
            System.out.println("Invalid ISBN number, please try again: ");
        }
    }
    throw new IllegalStateException("No more tokes in user input stream");
}

public static void main(String[] args) {

    String isbn = getISBN();
}

}