2017-10-11 14 views
0

나는 배낭 문제를 해결하기 위해 Java를 처음 사용합니다. 이 번호를 수동으로 메인에 추가 할 수 있습니다."main"스레드의 예외 java.lang.NumberFormatException : 입력 문자열의 경우

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

그러나 사용자가 숫자를 입력 할 수 없습니다.
첫 번째 숫자는 대상과 그 뒤에 오는 가중치 여야합니다.
그래서 사용자 입력을 문자열로 가져 와서 공백으로 분리 한 다음이를 정수로 변환하려고했습니다.
다음으로 parseInt 2 가지 방법을 시도했지만 두 방법 모두 실패했습니다. 당신의 도움에 대한

Exception in thread "main" java.lang.NumberFormatException: For input string: "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)

감사 : 여기

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); 
 
    } 
 
    
 
오류입니다 :
여기에 코드입니다.

+0

''String [] sar''에서''input''를 나눠 쓰고 있습니다 만, 그것을 사용하고 있지는 않습니다. 결국 파싱을 끝내고, 물론 "Integer"는 그러한 문자열을 공백으로 구문 분석 할 수 없습니다. –

+0

@SchiduLuca이 문제를 해결할 방법이 있습니까? 문자열에서 정수로의 변환이 제대로 작동하지 않습니다. 그래서 공백으로 문자열을 구문 분석하지 않으면 해결할 수 있습니까? – user8581463

답변

0

문자열 18 7 4 6을 사용하여 parseInt 메서드를 호출하고 있습니다. 이것은 유효한 정수가 아니므로 NumberFormatException이 발생합니다.

이미 입력을 String[] sar으로 분할하고 있습니다. for 루프에서는 sar의 각 값에 대해 이미 parseInt을 호출합니다.이 정수는 유효한 정수입니다. 당신이 모든 것을 가지고있는 것처럼 보입니다. int target = Integer.parseInt(input); 행을 삭제하면됩니다.

+0

대상을 제거하면 myWeights.bagOfWeights.add (대상)에 무엇을 추가 할 수 있습니까? 콘텐츠를 추가하려면? – user8581463

+0

@ user8581463 다릅니다. 뭘 넣고 싶니? 예외 때문에'.add (target);'에 도달하지 못했고, 도달했다면'target' _은 유효한 int가 아니기 때문에 당신에게 아무런 도움이되지 않습니다. 나는 당신이 거기에 넣고 자하는 int가'sar' 배열에 있다고 가정합니다, 그래서 당신은 거기서 그것을 얻습니다. –

+0

또한 sar 배열을 삽입하면 오류가 발생합니다. ArrayIndexOutOfBoundsException : 줄에 대해 4 행 [we - 1] = Integer.parseInt (sar [i]); – user8581463