0

ユーザーの args[] 入力が String か int かを区別するためにコーディングしているアプリケーションを作成しようとすると、問題が発生します。int 値を入力すると、共通の加算形式で一覧表示されて加算されます。String 値が 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 をスローする場合は、すでにチェックを終える前に。2番目:-1は有効な数値であるため、数字であるかどうかをチェックしても意味がありませんが、意図したチェックに失敗することは明らかです-残りのコードは、否定を処理するつもりであることを示しています。

于 2013-05-27T03:53:27.277 に答える