好吧,我似乎无法找到解决问题的明确答案。
我需要一个java中的程序,它可以返回用户输入的值,即一个正整数。
为了区别于许多其他类似的问题,我需要编程以便在输入字符串时不会崩溃。程序将需要重复提示用户输入,直到输入正整数。脚本将是这样的:
Input: 7.2
Error, try again: -5
Error, try again: -2.4
Error, try again: 3.77777
Error, try again: -1
Error, try again: 0
Error, try again: -33
Error, try again: microwave
Error, try again: -1
Error, try again: 4.2
Error, try again: hello
Error, try again: 3.14159
Error, try again: 4
4 is a positive integer.
重要的是,当输入类似单词之类的程序时程序不会崩溃。我无法想办法让程序做这样的事情。我可以在扫描仪中使用hasNextInt
,但后来我不知道如何检查它是否大于零,因为在另一种情况下输入可能是一个字符串。
有人可以帮我解决一个会返回上述脚本的程序吗?非常感谢。
编辑:好的,我终于在另一个问题中找到了我正在寻找的答案。此解决方案不使用parseInt()
,也不使用try
/ catch
,这正是我所寻求的。很好,很简单。所以这是解决方案代码:
Scanner in = new Scanner(System.in);
int num;
System.out.print("Input: ");
do {
while (!in.hasNextInt()) {
System.out.print("Error, not integer. Try again: ");
in.next();
}
num = in.nextInt();
if (num<=0){
System.out.print("Error, not positive. Try again: ");
}
} while (num <= 0);
System.out.println(num + " is a positive integer.");
答案 0 :(得分:1)
以这种方式尝试:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int value = -1;
do {
System.out.print("Input: ");
String input = scanner.next();
try {
value = Integer.parseInt(input);
} catch (NumberFormatException e) {
System.out.println("Error, try again: " + input);
}
} while (value < 1);
System.out.println(value + " is a positive integer.");
}
答案 1 :(得分:0)
就是为此写的。
答案 2 :(得分:0)
这是java中异常处理的link。通常,您只需将代码放入try块即可。然后,如果在该块中发生预期的异常,您的程序将在catch块中执行代码并继续它的工作。
答案 3 :(得分:0)
您需要以某种方式验证输入。如果输入的是Integer
。然后你需要将它打印到屏幕上,如果输入是Long
,那么你需要打印错误消息Try again
。
在下面的这个例子中,我创建了一个方法,它是C#
TryParse
方法的衍生物。 C# TryParseInt
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
while (true)
{
@SuppressWarnings("resource")
Scanner reader = new Scanner(System.in);
System.out.println("Enter a number: ");
String input = reader.next();
tryParseInt(input);
}
}
private static void tryParseInt(String input) {
try {
int val = Integer.parseInt(input);
System.out.println(val + " is a positive Integer");
} catch (NumberFormatException e) {
System.out.println(input + " Is not a number/positive Integer, " + e.getMessage());
}
}
}
它的作用是将输入解析为Integer
,如果它没有这样做,因为输入是String
或不是有效的Integer
an {{1}被抛出。然后我可以打印出我想要的错误信息。
祝你好运!
答案 4 :(得分:0)
以下是两种情况:
情景1:
- 我假设正整数是指整数1,2,3,4等...
- 诸如4.00之类的值不会被视为整数
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int value = 0;
System.out.print("Input: ");
while (value < 1){
String input = scanner.next();
try {
value = Integer.parseInt(input);
if(value < 1){
System.out.print("Error, try again: ");}
} catch (NumberFormatException e) {
System.out.print("Error, try again: ");
}
}
System.out.println(value + " is a positive integer.");
}
}
情景2:
- 我假设正整数是指整数1,2,3,4等...
- 诸如4.00之类的值将被视为整数
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Input: ");
String value = "";
boolean positiveIntegerNoDecimals = false;
while (positiveIntegerNoDecimals == false) {
value = scanner.next();
positiveIntegerNoDecimals = isPositiveIntegerNoDecimals(value);
if (positiveIntegerNoDecimals == false)
System.out.print("Error, try again:");
}
System.out.println(value + " is a positive integer.");
}
private static boolean isPositiveIntegerNoDecimals(String input) {
try {
int value = -1;
BigDecimal decimal = new BigDecimal(Double.parseDouble(input));
int scale = decimal.scale();
if (scale == 0)
value = decimal.stripTrailingZeros().intValue();
if (value > 0)
return true;
} catch (NumberFormatException e) {}
return false;
}
}