0

我在尝试制作我正在编码的应用程序以区分用户的 args[] 输入是字符串还是 int 时遇到了困难。如果输入了一个 int 值,它将被列出并以常见的添加格式添加。如果在 args[] 中键入字符串值,则会收集忽略参数的列表(忽略 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)  
4

2 回答 2

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
于 2013-05-27T03:53:42.540 回答
2

好吧,您可以 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 是一个有效的数字,但显然会失败你想到的任何检查 - 你的其余代码表明你打算处理否定。

于 2013-05-27T03:53:27.277 回答