线程“主”中的异常java.lang.NumberFormatException:对于输入字符串:

问题描述 投票:0回答:2

我正在研究背包问题,我是 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: For input 字符串:“18 7 4 6” java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 在 java.lang.Integer.parseInt(Integer.java:580) 在 java.lang.Integer.parseInt(Integer.java:615) 在 KnapSackWeights.main(KnapSackWeights.java:18)

感谢您的帮助。

java input knapsack-problem
2个回答
0
投票

您正在使用字符串

parseInt
调用
18 7 4 6
方法。由于这不是有效的整数,因此抛出 NumberFormatException。

您已经将输入拆分为

String[] sar
。在
for
循环中,您已经对
parseInt
中的每个值调用了
sar
,它们是有效的整数。似乎您已准备就绪;只需删除
int target = Integer.parseInt(input);
线。


0
投票

也许这会有所帮助


        //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));
© www.soinside.com 2019 - 2024. All rights reserved.