2012-06-24 130 views
0

我有這個源代碼:(這是我的家庭作業)。創建一個將數字從十進制轉換爲二進制的程序。 我差不多完成了。我需要刪除零,java

package binek; 

import java.io.BufferedReader; 
import java.io.IOException;   
import java.io.InputStreamReader; 

public class Binek { 
    public static void main(String[] args) { 
     String cislo; 
     int vypocet=1; 
     int zbytek=1; 
     int a=0; 

     BufferedReader in; 
     in = new BufferedReader(new InputStreamReader(System.in)); 
     try{ cislo = in.readLine(); } 
     catch(IOException e) {cislo="";} 
     int dec=Integer.valueOf(cislo); 
     int[] pole = new int[10]; 
     vypocet=dec/2; 
     zbytek=dec%2; 
     pole[0]=zbytek; 

     while(vypocet!=0){ 
      a++; 
      zbytek=vypocet%2; 
      vypocet=vypocet/2; 

      pole[a]=zbytek; 
     } 

     for (int i = 9; i < pole.length; --i) 
     { 
      System.out.print (pole[i]); 
     } // here is the field with unnecessary zeros 
    } 
} 
+1

好了,還等什麼呢這段代碼呢?它需要做什麼? –

+5

_i'm差不多完成_恭喜! :) 還要別的嗎? – Asif

+0

我覺得OP明確說*我需要刪除零和* /這裏是不必要的零字段* –

回答

2

你的循環是錯誤的:你是從數組的末尾開始檢查數組索引小於數組的長度 - 它總是少一些。所以你得到一個ArrayIndexOutOfBoundsException。這是修正循環,有前導零刪除:

boolean leadingZeros = true; 
for (int i = pole.length; i > 0; i--) { 
    if (leadingZeros && pole[i-1] == 0) continue; else leadingZeros = false; 
    System.out.print(pole[i-1]); 
} 
+0

哇......謝謝! :) – user1477988

+0

(關於SO規則的說明:不需要口頭表示感謝,但啓用答案左側的大複選標記將其標記爲_accepted_)。 –

1

我建議你使用Integer.toBinaryString(int)和轉換方法是這樣的

public void convertToBinary(int decimal){ 
    System.out.println("Decimal value is " + decimal); 
    System.out.println("Binary value is " + Integer.toBinaryString(decimal)); 

}

+0

由於這是功課,這可能不是一種選擇。 –

+0

它可以是其中一個變種 –

+0

如果作業的目標是實現轉換算法,這將像「複製答案」:) –

0
for(i=polelength-1;i>=0;i--){ 

    if(pole[i] != 0) break;   
} 

for(;i>=0;i--) 
    System.out.print(pole[i]); 
+0

這可以糾正一個錯誤,但不會回答問題。 OP甚至沒有意識到這個bug :) –

+0

'pole [pole.length-1]'不管它的價值是什麼值得打印的第一件事,不是嗎?爲什麼把'我 - '放在'for'體內? –

+0

yea .....對不起abt,錯過了他用10個元素初始化了數組 – Vizard