Javaユーザー入力から2セットの配列を融合します。Nullを処理するにはどうすればよいですか?
-
22-10-2019 - |
質問
CSクラスの割り当てのプログラムを書いています。
基本的に、それはラインの引数を指揮するのにかかる方法です。 CSVのようなものであるため、コールを呼び出すために、CSVの後にマージします。
例:マージ1,2,3,4 5,6,7,8
これは2つのことを行います。 1)各リストを配列引数として取得し、1つの大きな配列にマージします。2)その配列をソートします。
これが、null値に対処するために必要なコマンドラインからのキャッチです。したがって、ユーザーは:
マージ1,2、、3,4 5,6
これにどのように対処できますか?
エラー出力の例:
Enter commands:
merge 12,,2 43
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:493)
at java.lang.Integer.parseInt(Integer.java:514)
at CmdInterpreter.strArrayToIntArray(CmdInterpreter.java:143)
at CmdInterpreter.getIntArray(CmdInterpreter.java:130)
at Assign1.processOneCommand(Assign1.java:99)
at CmdInterpreter.processCommands(CmdInterpreter.java:198)
at CmdInterpreter.processCommands(CmdInterpreter.java:230)
at CmdInterpreter.ooMain(CmdInterpreter.java:243)
at MyAssign1.main(MyAssign1.java:20)
解決 3
list1でnullまたはlist2またはその両方でフィードできることがわかりました。しかし、それらの配列の要素ではありません...つまり、私はこの割り当ての問題ではない何かを試みていました。
他のヒント
Parseintを呼び出すときは、トライ/キャッチブロックでコールをラップします。 numberformatexceptionをキャッチした場合は、文字列を捨てて値の数を減らします。
編集:どうやってそれをしますか?このようなもの:
int[] extractValues(String arg) {
String[] sValues = arg.split(",");
int n = values.length;
int[] values = new int[n];
for (int i = 0; i < n; ++i) {
try {
values[i] = Integer.parseInt(sValues[i]);
} catch (NumberFormatException e) {
--n;
}
}
// reallocate values array if there were problems
if (n < values.length) {
int[] tmp = new int[n];
System.arraycopy(values, 0, tmp, 0, n);
values = tmp;
}
return values;
}
整数がないイベントを処理する必要があります。あなたは単にその完全性をチェックせずに入力を盲目的にループしているように思われます。そのため、例外を取得しています。
これを行う適切な方法は、あなたが解析している現在のデータが有効であることを保証するチェックメカニズムを設定することです(この場合、整数であることを意味します)。
これは学校の割り当てであると明示的に述べたので、私は非常に曖昧なままにしています。そのため、この答えを受け取り、それを使用して実験し、適切なソリューションを実装することを学ぶ必要があります。
stringutils.split これを行うための10の方法を提供する必要があります。