Java Fusion de deux ensembles de tableaux à partir d'une entrée de l'utilisateur - Comment puis-je gérer nulls?

StackOverflow https://stackoverflow.com/questions/4801658

  •  22-10-2019
  •  | 
  •  

Question

J'écris un programme pour l'attribution de la classe CS.

Fondamentalement, il est un procédé qui prend des arguments de ligne de commande. Quelque chose comme un CSV, afin d'appeler l'appel que je fais fusion suivi de l'être csv.

par exemple fusion 1,2,3,4 5,6,7,8

Cela va faire deux choses. 1) il prend chaque liste comme un argument de tableau fusionne ensuite dans une grande matrice, 2) il trie ce tableau.

Voici la capture, de la ligne de commande, nous devons traiter avec les valeurs NULL. Ainsi, un utilisateur peut se nourrir dans:

fusion de 1,2, 3,4 5,6

Comment puis-je faire face à cela?

exemple de la sortie d'erreur:

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)
Était-ce utile?

La solution 3

J'ai découvert que vous pouvez nourrir dans list1 comme nulle ou liste2, ou les deux. Mais pas des éléments de ces tableaux ... qui signifie que j'essayais quelque chose qui ne serait pas un problème pour cette mission.

Autres conseils

Lorsque vous appelez parseInt, envelopper l'appel dans un bloc try / catch. Si vous attrapez un NumberFormatException, jeter la chaîne et décrémenter le nombre de valeurs.

Edit: Comment faites-vous cela? Quelque chose comme ceci:

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

Vous devez gérer l'événement qu'il n'y a pas entier là. Il semble que vous êtes tout simplement à l'aveuglette en boucle par l'entrée sans vérifier son intégrité, ce qui est la raison pour laquelle vous obtenez une exception.

La bonne façon de le faire serait de mettre en place un mécanisme de vérification qui assure que les données actuelles que vous analyse syntaxique est valide (dans ce cas, ce qui signifie qu'il est un entier).

Je quitte ma réponse très vague parce que vous dit explicitement que ce soit pour un travail scolaire, de sorte que vous devriez prendre cette réponse et l'utiliser pour expérimenter et apprendre à mettre en œuvre une solution appropriée.

StringUtils.split devrait vous donner dix sur les moyens de le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top