我正在研究背包问题,我是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)
谢谢你的帮助。
2条答案
按热度按时间q3qa4bjr1#
您正在使用String
18 7 4 6
调用parseInt
方法。由于这不是有效的Integer,因此会引发NumberFormatException。你已经将输入拆分到
String[] sar
中。在for
循环中,你已经对sar
中的每个值调用了parseInt
,这些值都是有效的整数。看起来你已经万事俱备了;删除int target = Integer.parseInt(input);
行。ykejflvf2#
也许这能帮上忙