我正在研究背包问题,我是 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)
感谢您的帮助。
您正在使用字符串
parseInt
调用 18 7 4 6
方法。由于这不是有效的整数,因此抛出 NumberFormatException。
您已经将输入拆分为
String[] sar
。在 for
循环中,您已经对 parseInt
中的每个值调用了 sar
,它们是有效的整数。似乎您已准备就绪;只需删除int target = Integer.parseInt(input);
线。
也许这会有所帮助
//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));