我正在为一个程序编写一个代码,用户输入2到4个数字,最长可达2位小数。然而,在用户输入这些数字之前,他们必须输入英镑符号,例如#12.34。我想知道如何检查输入的双值是否以井号开始,如果用户忘记输入,则重新提示他们再次执行此操作。到目前为止我使用的是String值和' .startsWith()'代码,但我后来发现String值使得程序的其余部分无法编码,所以我想保持它的双倍值。这是我目前的代码,但希望改为双:
String input;
System.out.print("Enter the 4 numbers with a pound key: ");
input = keyboard.next();
while (!input.startsWith("#")) {
System.out.print("Re-enter the 4 numbers with a pound key: ");
input = keyboard.next();
}
我想要像前面提到的那样用双倍替换String。
答案 0 :(得分:3)
double
值没有货币符号。您应该检查货币符号,并在解析双重符号之前将其删除。
String input;
System.out.print("Enter the 4 numbers with a pound key: ");
input = keyboard.next();
while (!input.startsWith("£")) {
System.out.print("Re-enter the 4 numbers with a pound key: ");
input = keyboard.next();
}
doulble number = Double.parseDouble(input.substring(1));
答案 1 :(得分:3)
String input;
System.out.print("Enter the 4 numbers with a pound key: ");
input = keyboard.next();
while (!input.startsWith("#")) {
System.out.print("Re-enter the 4 numbers with a pound key: ");
input = keyboard.next();
}
// if your excution reaches here. then it means the values entered by user is starting from '#'.
String temp = input;
double value = Double.parseDouble(temp.replace("#",""));
对于程序的其余部分,请使用value
。我认为编码现在应该可行。
答案 2 :(得分:1)
你应使用startsWith
方法。我不知道你为什么这么说
我后来发现String值使得程序的其余部分无法编码
基本上,您需要反复提示,直到用户输入#符号。那么为什么不使用while循环?
System.out.println("Enter a number:");
String s = keyboard.next();
double d = 0.0; // You actually wnat to store the user input in a
// variable, right?
while (!s.trim().startWith("#")) {
System.out.println("You did not enter the number in the correct format. Try again.");
s = keyboard.next();
try {
d = Double.parseDouble(s.substring(1));
} catch (NumberFormatException ex) {
continue;
} catch (IndexOutOfBoundsException ex) {
continue;
}
}
这是很多代码!
说明:
首先,它会提示用户输入一个数字并将输入存储在s
中。这很容易理解。现在来了困难的部分。我们想循环,直到用户输入正确格式的输入。让我们看看那里有什么样的无效输入:
第一个由startsWith
方法处理。如果输入不以#开头,请再次询问用户。在此之前,首先调用trim
来修剪输入中的空格,以便像" #5.90"
这样的输入有效。第二部分由这部分处理:
try {
d = Double.parseDouble(s.substring(1));
} catch (NumberFormatException ex) {
continue;
} catch (IndexOutOfBoundsException ex) {
continue;
}
如果输入格式错误,请再次询问用户。如果用户输入长度小于1的字符串,请再次询问用户。
“但是等等!为什么要调用substring
方法?”您询问。如果用户 在前面输入#,然后输入正确的数字格式,您将如何将该字符串转换为double?在这里,我只是通过调用substring来修剪第一个字符。
答案 3 :(得分:1)
你可以尝试这样的东西,删除所有不是数字或点的角色:
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input;
System.out.println("Input a number: ");
while (!(input = br.readLine()).equals("quit")) {
Double parsedDouble;
if (input.matches("#[0-9]+\\.[0-9]{1,2}")) {
parsedDouble = Double.parseDouble(input.replaceAll("[^0-9.]+", ""));
System.out.println("double: " + parsedDouble);
System.out.println("Input another number: ");
} else {
System.out.println("Invalid. Try again. Example: #10.10");
}
}
}