2014-10-01 2 views
0

의 배열에서 이상한 결과를 무엇을 달성하려고하는 것은 방법 : 사용자 입력을 현 3 개 배열을 예를의 int

1, 11, 111; 2, 22, 222, 2222; 3, 33, 333, 3333, 33333

,을 제거하고 3 개의 배열에 숫자를 넣어야하지만 이상한 결과가 저장됩니다. 여기에 코드입니다 :

import java.util.Scanner; 

public class signum { 

    static int[] eja = new int[10000]; 
    static int[] tja = new int[10000]; 
    static int[] kja = new int[10000]; 

    private static String ej = null; 
    private static String tj = null; 
    private static String kj = null; 

    private static Scanner sc = new Scanner(System.in); 

    public static void main(String[] args) { 

     System.out.println("Write a first array of integers"); 
     ej = sc.nextLine(); 

     ej = ej.replaceAll("[^\\d]", " "); 


     System.out.println("Write a second array of integers"); 
     tj = sc.nextLine(); 

     tj = tj.replaceAll("[^\\d]", ""); 



     System.out.println("Write the third array of integers"); 
     kj = sc.nextLine(); 

     kj = kj.replaceAll("[^\\d]", " "); 

     for(int i = 0; i < ej.length(); i++) { 

      Character c = ej.charAt(i); 

      if(c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || 
       c == '5' || c == '6' || c == '7' || c == '8' || c == '9') { 
       eja[i] = c; 

       System.out.println(eja[i]); 
      } 
     } 
    } 
} 

내가 첫 번째 배열을 저장하려고 아직도 그것을 알고 있지만 요점은 내가 1, 1, 1 같은 것을 저장하려고하면이 49, 49, 49를 저장한다는 것입니다.

나는 여전히 그 번호를 저장하는 방법을 모르겠다 > 9, 어떤 아이디어? 미리 감사드립니다. 나는 실제로 아이디어가 부족합니다 ..

+2

이 왜 [당신의 문자열을 분할] (http://stackoverflow.com/a/3481842/264775) 다음 [정수를 사용하여 개별 요소를 구문 분석하지 않습니다. parseInt] (http://stackoverflow.com/a/5585800/264775)? – thegrinner

+0

자바에서는 int에 char을 할당 할 수 있지만 적절한 방법으로 char을 할당 할 수 있습니다. http://stackoverflow.com/a/17984993/1951298 –

답변

2

문자를 읽고 나서 int[]에 저장할 때 (암시 적으로) 정수로 변환합니다. 그러나 '1'의 문자는 int으로 변환 될 때 1으로 끝나지 않으며 ASCII 값인 49으로 변환됩니다.

전체 숫자로 읽고 싶다면 Integer.parseInt(String s)을 사용하여 int으로 변환하십시오.

사용 String bits[] = ej.split(",");는 자신에게 정수의 String 표현의 배열을 얻을, 다음 각 int을 얻을 수있는 for 루프 내에서 eja[i] = Integer.parseInt(bits[i].trim())를 사용합니다.

불필요한 공백을 제거하려면 각 부분의 정확한 서식을 지정해야합니다. ej.split(", ")을 사용하여 쉼표와 공백으로 분리 할 수 ​​있지만 넘어 질 수 있습니다. 나중에 하나가 여분의 공백이나 공백없이 나타나면)

+0

이제 거래가 어떻게되는지 보겠습니다. 고마워! 왜 내가 그런 생각을하지 않았는지 전혀 모른다. 다시 한번 감사드립니다! – Artur

+0

배열에 숫자를 저장하려고 할 때 여전히 예외가 발생합니다. "main"스레드의 예외 java.lang.NumberFormatException : 입력 문자열 : "1 1 1" "1, 1, 1"을 입력했습니다. – Artur

+0

@Artur 'replaceAll' 행을 가져옵니다! 너는 더 이상 그 (것)들을 원하지 않는다. 당신이'String'을 분리하기 전에 그들은 쉼표를 없애고 있습니다. –

-1

결과 배열의 유형은 Integer이지만 문자를 입력하고 있습니다. 즉, 값이 다르게 표시됩니다. 다음으로 그들을 다시 정의하고 그것을 작동합니다

static char[] eja = new char[10000]; 
static char[] tja = new char[10000]; 
static char[] kja = new char[10000]; 
관련 문제