2014-04-10 2 views
0

프로그래밍을 처음하면서도이 문제를 염두에두고 있습니다.스택을 사용하여 정수를 2 진수로 변환

스택에 일부 remainders를 푸시하고 스택을 팝하여 이진수로 출력합니다.

import java.util.Stack; 

public class BinaryNumber { 
    private static Stack<Integer> stack = new Stack<Integer>(); 
    private static int remainder; 

public static String binaryNum(int number){ 
     while (number > 0){ //while number > 0 
      if ((number % 2 != 1) && (number % 2 != 0)){ //if number is not equal to zero or 1 
       number = (number-1); //update number to one less 
       int remainder = 1; 
      } 
      else{ 
      int remainder = number % 2; //get the remainder 
      } 
      stack.push(new Integer(remainder)); 
      number /= 2; 
     } 
     stack.push(new Integer(1)); 
     return "hello".toString(); //just a test 
    } 
public static void printStack(){ 
    while (!stack.isEmpty()){ 
     stack.pop(); 
    } 
} 
    public static void main(String[]args){ 
     binaryNum(20); 
     printStack(); 
    } 
} 

출력이없는 것 같습니다. 나는 종이에서 문제를 해결하려고 노력했지만 실패한 부분을 파악할 수 없다. 나는 거기에 이전에 println 문을 가지고 있었고, 내 원래의 if 문이 binaryNum에 항상 불려지는 것처럼 보였습니까?

감사합니다.

+0

((번호 % 2 = 1) && (번호 % 2 = 0)!!) 경우 - 이해되지 않는다. 2로 나눈 나머지는 항상 0 또는 1입니다. –

+0

고맙습니다. 모듈러스 연산자가 실제로 제공하는 것에 대해 조금 혼란스러워졌습니다. – user3519261

답변

0

다음과 같이 코드를 수정해야합니다. import java.util.Stack;

public class BinaryNumber { 
    private static Stack<Integer> stack = new Stack<Integer>(); 
    private static int remainder; 

public static String binaryNum(int number){ 
     while (number > 0){ //while number > 0 
      if ((number % 2 != 1) && (number % 2 != 0)){ //if number is not equal to zero or 1 
       number = (number-1); //update number to one less 
       **remainder = 1;** 
      } 
      else{ 
       **remainder = number % 2; //get the remainder** 
      } 
      stack.push(new Integer(remainder)); 
      number /= 2; 
     } 
     stack.push(new Integer(1)); 
     return "hello".toString(); //just a test 
    } 
public static void printStack(){ 
    while (!stack.isEmpty()){ 
     **System.out.println(stack.pop());** 
    } 
} 
    public static void main(String[]args){ 
     binaryNum(20); 
     printStack(); 
    } 
} 

2 개의 지역 변수 '나머지'를 초기화하는 중입니다. 스택 객체에 추가되는 것은 전역 변수입니다.

0

인쇄를하지 않으므로 출력이 없습니다!

보십시오이 (가 실제로 작동) :

import java.util.Stack; 

public class BinaryNumber { 
    private static Stack<Integer> stack = new Stack<Integer>(); 

    public static void binaryNum(int number) { 
     // Important! In case you call binaryNum twice without calling printStack in between. 
     stack.clear(); 
     while (number > 0) { // while number > 0 
      int remainder = number % 2; // get the remainder 
      stack.push(new Integer(remainder)); 
      number /= 2; 
     } 
    } 

    public static void printStack() { 
     while (!stack.isEmpty()) { 
      System.out.print(stack.pop()); 
     } 
    } 

    public static void main(String[] args) { 
     binaryNum(20); 
     printStack(); 
    } 
} 
+0

정말 감사합니다. 얼마나 가까웠는지 반가워요. 나는 항상 간단한 방법보다는 복잡한 방식으로 끝내고있다. 시간이 지남에 따라 이것을 배울 것입니다. 모듈 % 2 이후에 1이나 0 이외의 다른 숫자를 얻을 수 있으므로 보정하려고했으나 깨끗하다고 ​​생각했습니다. – user3519261

+0

대단히 환영합니다! 프로그래밍을 배우십시오, 그것은 아주 재미 있습니다! –

관련 문제