我写了一个会干扰用户的程序。但是,它只能运行一次。我希望我的程序在用户输入“ 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);
}
}
答案 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();
}
}