我在编写应用程序时遇到困难,我正在编码以区分用户的args []输入是String还是int。如果键入了int值,则将以常用的添加格式列出并添加。如果在args []中键入String值,则会收集忽略的参数列表(Strin []被忽略),并打印供用户查看。我试图通过嵌套循环来区分这一点,这些循环解析作为int值输入的值,并检查这个args [] String值是否确实是一个int,但是,在编程时相当新,我已经遇到了很大的障碍。有什么建议吗?
这是我的代码:
public class Addition {
public static void main(String args[]) {
int sum = 0;
String[] ignored = new String[args.length];
if(args.length == 0) {
System.out.println("No input values!");
} else {
for(int i = 0; i < args.length; i++) {
if(Character.isDigit(Integer.parseInt(args[i]))) {
sum += Integer.parseInt(args[i]);
if(i == 0) {
System.out.print(args[i]);
} else if(Integer.parseInt(args[i]) >= 0) {
System.out.print(" + " + args[i]);
} else if(Integer.parseInt(args[i]) < 0) {
System.out.print(" - " + (Integer.parseInt(args[i]) * -1));
}
} else if(!Character.isDigit(Integer.parseInt(args[i]))) {
ignored[i] = args[i];
}
} System.out.print(" = " + sum);
}
}
}
我收到此互动错误:
java.lang.NumberFormatException: For input string: "-"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Addition.main(Addition.java:17)
答案 0 :(得分:4)
好吧我不清楚你要对你的数字做什么,但你实际上可以使用NumberFormatException
来实现你必须做的事情(将数字和非数字分开)。
ArrayList<Integer> numbers = new ArrayList<Integer>();
ArrayList<String> nonNumbers = new ArrayList<String>();
for(String s : args)
{
try
{
int number = Integer.parseInt(s);
numbers.add(number);
}
catch (NumberFormatException nfe)
{
nonNumbers.add(s);
}
}
// rest of your code can use numbers and nonNumbers lists
答案 1 :(得分:1)
好吧,你可以A)确定它是一个数字,然后解析它,或者B)尝试解析,如果失败则优雅地处理它。既然你在总结事情,我认为它们应该是一个数字,所以让我们选择B。
在你的情况下,这个简单的东西会起作用:
int badArgs = 0;
for(int i = 0; i < args.length; i++) {
try {
int value = Integer.parseInt(args[i]);
// Do your main logic with value here
} catch (NumberFormatException e) {
ignored[badArgs++] = args[i];
}
你代码的当前问题:检查.isDigit是没有意义的 - 它意味着从字符串中检查一个字符 - 你已经在那时解析了它,所以如果它将抛出一个NumberFormatException,它将在你完成支票之前已经有了。第二:检查它是否是一个数字无论如何都没有意义,因为-1是一个有效数字,但显然会失败你想到的任何检查 - 其余的代码显示你打算处理否定。