线程“main”出现异常java.lang.NumberFormatException:对于输入字符串:

0lvr5msh  于 2023-04-19  发布在  Java
关注(0)|答案(2)|浏览(177)

我正在研究背包问题,我是Java新手。我能够手动添加数字,主要如下所示:

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

但是,我不能允许用户输入数字。
第一个数字应该是目标,后面是权重。
因此,我尝试将用户输入作为字符串,并使用空格将其拆分,然后将其转换为整数。
接下来,我尝试了parseInt 2种方法,但两种方法都不成功。
代码如下:

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

下面是错误:
线程“main”出现异常java.lang.NumberFormatException:对于输入字符串:“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)
谢谢你的帮助。

q3qa4bjr

q3qa4bjr1#

您正在使用String 18 7 4 6调用parseInt方法。由于这不是有效的Integer,因此会引发NumberFormatException。
你已经将输入拆分到String[] sar中。在for循环中,你已经对sar中的每个值调用了parseInt,这些值都是有效的整数。看起来你已经万事俱备了;删除int target = Integer.parseInt(input);行。

ykejflvf

ykejflvf2#

也许这能帮上忙

//your input
        String input = "18 7 4 6";
        //split into string array by space
        String[] split = input.split(" ");
        int[] nums = new int[split.length];
        //parse each string into number
        for (int i = 0; i < split.length; i++) {
            nums[i] = Integer.parseInt(split[i]);
        }
        System.out.println(Arrays.toString(nums));

相关问题