2017-04-18 14 views
0

私は、10進数と10進数の部分を加算するために、スタックとリンクリストを使用するために、ある精度でバイナリをバイナリに変換するコードを実装しようとしています。次に、Stringbuilderを使用して要素を1つずつポップ/ポーリングして最後の2進数を求めます。ソース:http://www.geeksforgeeks.org/convert-decimal-fraction-binary-number/スタックおよびリンクリストのJAVAに番号がありませんか?

スタック/リストに要素をプッシュすると、それらがプッシュされているのがわかります(o/p stmtsを使用しています)。何らかの理由で私は要素を飛び出すときにそれらを見ない。ここ

は私のコードは

import java.util.LinkedList; 
import java.util.Queue; 
import java.util.Stack; 

パブリッククラスBinaryToDecimal {

public String toBinary(float n, int p){ 
    int non_dec = (int) Math.floor(n); 
    Stack<Integer> s_non_dec = new Stack<>(); 
    LinkedList<Integer> q_dec = new LinkedList<>(); 
    float dec = n - non_dec; 
    int quotient = 1; 
    while(quotient > 0){ 
     quotient = non_dec/2; 
     int remainder = non_dec%2; 
     System.out.println("quotient"+quotient+"non_dec"+non_dec+"remainder"+remainder); 
     s_non_dec.push(remainder); 
     non_dec = quotient; 
    } 

    while(p>0){ 
     System.out.println("before dec"+dec); 
     dec = dec*2; 
     System.out.println("after dec"+dec); 
     if(dec >=1){ 
      System.out.println("add 1"); 
      q_dec.add(1); 
      dec = dec - 1; 
     } 
     else{ 
      System.out.println("add 0"); 
      q_dec.add(0); 
     } 
     p--; 
    } 
    StringBuilder sb = new StringBuilder(); 
    for(int i=0;i<s_non_dec.size();i++){ 
     System.out.println("pop"+s_non_dec.peek()); 
     sb.append(s_non_dec.pop()); 
    } 
    sb.append('.'); 
    for(int i=0;i<q_dec.size();i++){ 
     System.out.println("poll"+q_dec.peek()); 
     sb.append(q_dec.poll()); 
    } 

    return sb.toString(); 
} 

public static void main (String args[]){ 
    BinaryToDecimal btd = new BinaryToDecimal(); 
    System.out.println(btd.toBinary(2.47f, 5)); 
} 

}

マイ出力される。

quotient1non_dec2remainder0 
quotient0non_dec1remainder1 
before dec0.47000003 
after dec0.94000006 
add 0 
before dec0.94000006 
after dec1.8800001 
add 1 
before dec0.8800001 
after dec1.7600002 
add 1 
before dec0.7600002 
after dec1.5200005 
add 1 
before dec0.52000046 
after dec1.0400009 
add 1 
pop1 
poll0 
poll1 
poll1 
1.011 

Iは1を押してもタフ、上で見たように0私のスタックには、私の出力は、1と0の代わりに小数点以下の部分に対して1つしかありません!同じことが小数部分にも起こります! 私は何時間もこのコードを見てきました。

答えて

1

forループでエラーが発生しました。ここでは、すべてのポップ操作の後に減少し、し続けますスタックサイズs_non_dec.size、ルーピングされている

for(int i=0;i<s_non_dec.size();i++){ 
    System.out.println("pop"+s_non_dec.peek()); 
    sb.append(s_non_dec.pop()); 
} 

「i」は、すべての繰り返しの後に増加し続けます。スタックが空であるかどうかをよく確認できます。使用

while(!s_non_dec.isEmpty()) { 
    System.out.println("pop"+s_non_dec.peek()); 
    sb.append(s_non_dec.pop()); 
} 
関連する問題