2012-11-27 3 views
-3

시리즈 바이너리 숫자와 다음 시리즈의 바이너리 숫자를 출력하려고 시도하는 것은 이전 시리즈의 바이너리 숫자에 따라 다릅니다. 이 계열 중 일부는 하나 이상의 0을 나타냅니다. int 변수 만 사용할 수 있습니다.int 변수 앞에 0을 출력합니다.

따라서 프로그램이 0으로 시작하면 다음 출력은 01이고 다음은 0110이됩니다. int가 0으로 시작하거나이 작업을 수행 할 수있는 다른 방법이 있다면 0으로 시작하는 코드를 하드 코딩해야합니까?

또한 이진수를 출력하는 유일한 방법은 Integer.toBinaryString()입니까? 문제는 정말 그냥이 간단한 경우

+0

http://stackoverflow.com/questions/473282/left-padding-integers-with-zeros-in-java – zbrunson

+0

Google에서 문자열 서식 지정 검색 –

+3

아니요. 정수는 정수입니다. 선행 0은 숫자를 특별하게하지 않습니다 (단, 문자 8 진수를 사용하는 것은 제외). –

답변

1

, 당신이 시도해야합니다

System.out.print("0"+x); 

을하면, 정수 값을 저장 인식 될 수있다. 화면에 출력되는 내용이 String으로 변환됩니다. 정수는 선행 0이없는 tring으로 변환 될 것입니다.

그런데 숫자 상수를 0으로 시작하면 자바에서는 8 진수를 지정한다는 의미입니다.

추천 도서 : 당신은 주어진 형식으로 출력 번호, 당신은 확실히 DecimalFormat

System.out.println(new DecimalFormat("00").format(x)); 
1

유형에 위로 읽어야한다처럼 Java literals

그러나 문제는, 더 깊은 경우 int 단지 숫자의 정수를 저장 가치와 아무것도. int 변수는 앞에 오는 0이나 숫자가 입력 된 밑줄을 저장하지 않습니다. 귀하의 경우에 선행 0은 8 진수를 의미하며 아마도 어쨌든 당신이 의미하는 바가 아닙니다.

앞에 오는 0을 저장하려면 다른 방법을 사용하십시오 (예 : 제안하는대로 문자열 사용).

3

그냥 의 값이 1이기 때문에 결과가 의미가 없습니다. 컴파일러는 그 값을 일련의 숫자가 아닌 숫자로 저장합니다. 에보십시오 : 당신은 진수 (기수 8)로 해석됩니다 문자 선도적 0 수를 배치 할 때

int x = 1; 
System.out.printf("%02d", x); 

이 더 정확합니다. 따라서 01은 괜찮습니다. 그러나 08은 유효하지 않습니다 (8은 유효한 8 진수가 아니기 때문에). 많은 프로그래밍 언어에서 마찬가지입니다. 어떤 경우

는 숫자 와 숫자 문자을 혼동하지 마십시오. 컴파일러는 리터럴을 값으로 변환하고 값은 런타임에 효과적으로 사용됩니다.

+4

Louis Wasserman은 "정수는 정수입니다. 앞에 오는 0은 숫자를 특별하게하지 않습니다."라고 말했습니다. 중요 포인트 : 앞에 오는 "0"은 "리터럴 8 진수"입니다. 리터럴 "07"은 "7"입니다. 리터럴 "010"은 "8"입니다. 리터럴 "08"은 불법입니다. – paulsm4

-6

내가 아는 한, 자바가 불필요한 0을 제거하여 램 사용량을 절약하려고하기 때문에. 가장 좋은 방법은 그것을 문자열로 만들고 시간을 추가, 제거하고, 문자열 정수로 문자열 정수를 나눌 수있는 메서드를 만드는 것입니다 (시간이 경과 한 후 0을 시작으로 읽음).

편집

public String addStringInteger(String x1, Integer i){ 
    String leading0 = ""; 
    String nol = ""; 
    boolean onLeading = true; 
    for(char c : x1.toCharArray()){ 
     String l = Character.toString(c); 
     if(onLeading && l.equals("0")){ 
      leading0 += "0"; 
     }else{ 
      onLeading = false; 
      nol += l; 
     } 
    } 
    int intO = Integer.parseInt(nol) + i; //you can change + to x, -,/etc 
    return leading0 + ""+ intO; 
} 

다시 021를 얻을 수 있도록 addStringInteger을 할 수 있도록 할이 예 ("001", 20)와 다시 0021을 얻을 것이 방법은 편집 할 수 있지만, 그 제작 등 빠른 예제,이 종류의 메소드는 아무 것도 수행 할 수 있어야합니다.

+3

RAM 사용? 이 문맥에서 RAM 사용은 부적절합니다. 문제는 숫자 리터럴이 숫자 값으로 파싱된다는 것인데, 이들은 똑같은 것이 아닙니다. 01 또는 1 둘 다 1로 구문 분석됩니다 (0은 일반적으로 8 진수를 지정한다는 사실 제외) – Jack

+2

더 간결하게 ... WTF?!? – paulsm4

+0

편집 : 죄송합니다, 그냥 텍스트 상자에 뛰어 들었습니다. De-snarked. – chucksmash

관련 문제