Java Integer.parseInt混淆

Java Integer.parseInt混淆,java,parseint,args,Java,Parseint,Args,我很难编写一个应用程序来区分用户的args[]输入是字符串还是int。如果键入了int值,它将以常见的加法格式列出和添加。如果在args[]中键入字符串值,则会收集被忽略参数的列表(Strin[]已忽略),并将打印出来供用户查看。我试图通过嵌套循环来区分这一点,嵌套循环将输入的值解析为int值,并检查这个args[]字符串值是否确实是int,但是,作为编程新手,我遇到了相当大的障碍。有什么建议吗 这是我的密码: public class Addition { public static

我很难编写一个应用程序来区分用户的args[]输入是字符串还是int。如果键入了int值,它将以常见的加法格式列出和添加。如果在args[]中键入字符串值,则会收集被忽略参数的列表(Strin[]已忽略),并将打印出来供用户查看。我试图通过嵌套循环来区分这一点,嵌套循环将输入的值解析为int值,并检查这个args[]字符串值是否确实是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);
    }
  }
}
好的,您可以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];
  }
int-badArgs=0;
对于(int i=0;i
代码当前存在的问题:检查.isDigit没有任何意义-它意味着检查字符串中的字符-此时您已经对其进行了解析,因此如果它将抛出NumberFormatException,则在您完成检查之前,它已经抛出了NumberFormatException。第二:检查它是否是数字无论如何都没有意义,因为-1是有效的d是一个数字,但很明显,无论你想做什么检查都会失败——你的代码的其余部分表明你打算处理否定。

好吧,你可以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];
  }
int-badArgs=0;
对于(int i=0;i

代码当前存在的问题:检查.isDigit没有任何意义-它意味着检查字符串中的字符-此时您已经对其进行了解析,因此如果它将抛出NumberFormatException,则在您完成检查之前,它已经抛出了NumberFormatException。第二:检查它是否是数字无论如何都没有意义,因为-1是有效的d个数字,但显然无法通过您想要的任何检查,并且代码的其余部分表明您打算处理否定项。

好的,我不太清楚您想用数字做什么,但您可以实际使用
数字格式异常
来实现您必须做的事情(将数字和非数字分开)

ArrayList number=new ArrayList();
ArrayList nonNumbers=新的ArrayList();
for(字符串s:args)
{
尝试
{
int number=整数。parseInt(s);
数字。添加(数字);
}
捕获(NumberFormatException nfe)
{
非数字。添加(s);
}
}
//代码的其余部分可以使用数字和非数字列表

好的,我不太清楚你想用数字做什么,但是你可以使用
NumberFormatException
来实现你必须做的事情(将数字和非数字分开)

ArrayList number=new ArrayList();
ArrayList nonNumbers=新的ArrayList();
for(字符串s:args)
{
尝试
{
int number=整数。parseInt(s);
数字。添加(数字);
}
捕获(NumberFormatException nfe)
{
非数字。添加(s);
}
}
//代码的其余部分可以使用数字和非数字列表

对int调用Character方法没有什么意义,即使您的代码确实有效。除非int是字符的Unicode表示,而您的不是。首先找出您的逻辑,然后再编写代码。我试图让应用程序区分用户输入的值是字符串还是int值。任何实际的su关于为什么它没有意义的建议或解释?对int调用Character方法几乎没有意义,即使您的代码可以工作。除非int是字符的Unicode表示,而您的不是。首先找出您的逻辑,然后再编写代码。我试图让应用程序区分er输入的是字符串或int值。有任何实际的建议或解释说明为什么它没有意义吗?感谢建设性的输入。它确实有助于理解我代码的错误。感谢建设性的输入。它确实有助于理解我代码的错误。
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