2017-10-11 4 views
0

Ich arbeite an dem Rucksack-Problem, ich bin neu in Java. Ich bin Zahlen können manuell hinzufügen, wie dies in der Haupt:Ausnahme im Thread "Haupt" java.lang.NumberFormatException: Für Eingabezeichenfolge:

// Fill the bag of weights. 
//myWeights.bagOfWeights.add(18); 
//myWeights.bagOfWeights.add(2); 
//System.out.println("Possible answers: "); 
//myWeights.fillKnapSack(20); 

Aber ich bin nicht in der Lage den Benutzer zur Eingabe der Nummern zu ermöglichen.
Die erste Zahl sollte das Ziel gefolgt von den Gewichten sein.
Also habe ich versucht, die Benutzereingabe als Zeichenfolge zu nehmen und es mit Leerzeichen aufzuteilen, und wandle es dann in eine Ganzzahl um.
Als nächstes habe ich versucht, die parseInt 2 Möglichkeiten, aber ich war in beide Richtungen nicht erfolgreich. Hier
ist der Code:

import java.util.*; 
 
    
 
    public class KnapSackWeights{ 
 
    
 
    private Sack bagOfWeights = new Sack(); 
 
    private Sack knapSack = new Sack(); 
 
    
 
    public static void main(String[] args){ 
 
     KnapSackWeights myWeights = new KnapSackWeights(); 
 
     Scanner in = new Scanner(System.in); 
 
     System.out.println("Enter the input:"); 
 
     String input = in.nextLine(); 
 
     String[] sar = input.split(" "); 
 
     //System.out.println(inp); 
 
     int target = Integer.parseInt(input); 
 
     System.out.println(target); 
 
     
 
     int[] weights_array = new int[26]; 
 
     
 
     int n = input.length()-1; 
 
     for(int i=1; i<=n; i++) 
 
     { 
 
      weights_array[i - 1] = Integer.parseInt(sar[i]); 
 
     } 
 
     int k = weights_array[0]; 
 
     myWeights.bagOfWeights.add(target); 
 
     //System.out.println(target); 
 
     System.out.println("Possible answers: "); 
 
     myWeights.fillKnapSack(k); 
 
     //myWeights.fillKnapSack(Integer.parseInt(sar[0])); 
 

 
     // Fill the bag of weights. 
 
     //myWeights.bagOfWeights.add(11); 
 
     //myWeights.bagOfWeights.add(8); 
 
     //myWeights.bagOfWeights.add(7); 
 
     //myWeights.bagOfWeights.add(6); 
 
     //myWeights.bagOfWeights.add(5); 
 
     //myWeights.bagOfWeights.add(4); 
 
     
 
     //System.out.println("Possible answers: "); 
 
     //myWeights.fillKnapSack(20); 
 
    } 
 
    
 

Hier ist der Fehler:

Exception in thread "main" java.lang.NumberFormatException: For input string: "18 7 4 6" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.parseInt(Integer.java:615) at KnapSackWeights.main(KnapSackWeights.java:18)

Vielen Dank für Ihre Hilfe.

+0

Sie teilen die '' input'' in '' String [] sar'' auf, aber Sie verwenden sie nicht einmal. Am Ende parst du die Zeile, natürlich kann "Integer" eine solche Zeichenfolge nicht mit Leerzeichen parsen. –

+0

@SchiduLuca Gibt es eine Möglichkeit, das zu beheben? Die Umwandlung von String in Integer funktioniert nicht ordnungsgemäß. Also, wenn ich die Zeichenfolge nicht mit Leerzeichen analysieren, sollte das lösen? – user8581463

Antwort

0

Sie rufen die Methode parseInt mit der Zeichenfolge 18 7 4 6 auf. Da dies keine gültige Ganzzahl ist, wird die NumberFormatException ausgelöst.

Sie teilen den Eingang bereits in String[] sar. In der for Schleife rufen Sie bereits parseInt für jeden Wert in sar, die gültige Ganzzahlen sind. Scheint so, als hättest du alles an seinem Platz; Entfernen Sie einfach die int target = Integer.parseInt(input); Zeile.

+0

Wenn ich das Ziel entferne, was kann ich zu myWeights.bagOfWeights.add (target) hinzufügen; Um den Inhalt hinzuzufügen? – user8581463

+0

@ user8581463 Es kommt darauf an; was willst du da reinlegen? Gerade jetzt '.add (target);' wird wegen der Ausnahme nicht erreicht, und wenn es erreicht wurde, würde es dir nicht gut tun, weil 'target' _nicht ein gültiger int ist_. Ich gehe davon aus, dass das int, das du einfügen willst, im Array "sar" ist, also bekommst du es von dort. –

+0

Das Einfügen des Sar-Arrays hinterlässt auch einen Fehler: ArrayIndexOutOfBoundsException: 4 für die Zeile weights_array [i-1] = Integer.parseInt (sar [i]); – user8581463

Verwandte Themen