Frage

Ich schreibe ein Programm für CS -Klassenzuweisungen.

Grundsätzlich ist es eine Methode, die die Befehlszeilenargumente annimmt. So etwas wie ein CSV, um den Anruf anzurufen, den ich fusioniere, folgt die CSVs.

ZB verschmelzen 1,2,3,4 5,6,7,8

Dies wird zwei Dinge tun. 1) Es dauert jede Liste als Array -Argument und verschmilzt dann in 1 großes Array, 2) es sortiert dieses Array.

Hier ist der Haken, aus der Befehlszeile müssen wir uns mit Nullwerten befassen. Ein Benutzer könnte also einfügen:

verschmelzen 1,2, 3,4 5,6

Wie gehe ich damit um?

Beispiel für die Fehlerausgabe:

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)
War es hilfreich?

Lösung 3

Ich habe herausgefunden, dass Sie entweder List1 als Null oder List2 oder beides füttern können. Aber keine Elemente dieser Arrays ... was bedeutet, dass ich etwas ausprobierte, das für diese Aufgabe kein Problem wäre.

Andere Tipps

Wenn Sie Parseint anrufen, wickeln Sie den Anruf in einen Versuch/Catch -Block ein. Wenn Sie eine Numberformatexception fangen, werfen Sie die Zeichenfolge weg und verringern Sie die Anzahl der Werte.

Bearbeiten: Wie machst du das? Etwas wie das:

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;
}

Sie müssen das Ereignis bewältigen, dass es dort keine Ganzzahl gibt. Es scheint, dass Sie einfach blind durch die Eingabe schauen, ohne nach seiner Integrität zu überprüfen, weshalb Sie eine Ausnahme erhalten.

Der richtige Weg, dies zu tun, besteht darin, einen Überprüfungsmechanismus einzurichten, der sicherstellt, dass die aktuellen Daten, die Sie analysieren, gültig sind (in diesem Fall, dh es ist eine Ganzzahl).

Ich verlasse meine Antwort sehr vage, weil Sie ausdrücklich darauf hingewiesen haben, dass dies für eine Schulaufgabe gedacht ist. Sie sollten diese Antwort also verwenden und sie verwenden, um eine ordnungsgemäße Lösung zu implementieren.

StringUtils.Split Sollte Ihnen ungefähr zehn Möglichkeiten geben, dies zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top