2012-06-24 131 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