Uitzondering in thread main java.lang.NumberFormatException: Voor invoerstring:

Ik werk aan het rugzakprobleem, ik ben nieuw in Java. Ik kan nummers als volgt handmatig toevoegen:

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

Ik kan de gebruiker echter niet toestaan ​​de nummers in te voeren.
Het eerste cijfer moet het doel zijn, gevolgd door de gewichten.
Dus ik heb geprobeerd de gebruikersinvoer als een tekenreeks te nemen en deze op te splitsen met witruimte, en deze vervolgens om te zetten in een geheel getal.
Vervolgens probeerde ik de parseInt op 2 manieren uit te voeren, maar het was in beide richtingen niet gelukt .
Hier is de 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);
    }
    

Antwoord 1

Je roept de parseIntmethode aan met de String 18 7 4 6. Aangezien dit geen geldig geheel getal is, wordt de NumberFormatException gegenereerd.

Je splitst de invoer al in de String[] sar. In de for-lus roept u al parseIntaan op elke waarde in sar, dit zijn geldige gehele getallen. Het lijkt alsof je alles op zijn plaats hebt; verwijder gewoon de regel int target = Integer.parseInt(input);.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes