0

代码编译得很好,但会出现运行时错误,例如

      Exception in thread "main" BitBin.IndexOutOfRangeException: out of range
                 at BitBin.decmalToBinary.birBin(decmalToBinary.java:52) 
                 at BitBin.decmalToBinary.main(decmalToBinary.java:42)

我不太确定问题是什么,因为我在代码中抛出了如下异常:对不起,当我输入除数字之外的任何内容时,它对我有异常,你能帮我吗?例如我输入字符而不是数字

package BitBin;
import java.util.Scanner;


public class decimalToBinary {

   static int decToBin (int n) {
             int term = 0;

            while (n != 0) {
                term ++;
                n /= 2;
        }

            return term;
    }

       static String ArrayBinToStr (int[] Array) {
            String ret = "";
            for (int i = Array.length-1; i >= 0; i--)
                  ret += Integer.toString(Array[i]);

        return ret;
    }

             public static void main (String[] args) {


                    Scanner sc=new Scanner (System.in);
                       System.out.print ("Enter number : ");
                       int num = sc.nextInt();

                         int[] bin = new int[decToBin (num)];
                          int dup = num, el = -1;

                   while (dup != 0) {
                         int rem = dup % 2;
                         bin [++el] = rem;
                            dup /= 2;
        }

                      String d2b = binBit(bin);
                             System.out.println("Binary of " + num + " is: " + d2b);


    }
                  static  String binBit(int []d2b) throws IndexOutOfRangeException{
                        Scanner sc=new Scanner (System.in);
                          System.out.print ("Enter bit: ");
                        int bit = sc.nextInt();
                        if(bit>d2b.length-1 || bit<0)
                            throw new IndexOutOfRangeException("out of range");
                         String rit="";
                          int i=bit;
                          if(d2b[i]== 0  )
                                  System.out.println("bite " +i+ " om  0 ast.");
                        else
                           System.out.println("bite " +i+ " om 1 ast.");
                            for (i = d2b.length-1; i >= 0; i--){
                           rit+=Integer.toBinaryString(d2b[i]);
}

                        return rit;


    }

}
}


SAMPLE INPUT FILE
Enter number: 
Enter bit:
4

2 回答 2

0

if(bit>d2b.length-1 || bit<0)这种情况是真实的。所以它抛出了那个异常。

字符串 d2b = binBit(bin);

你正在评估内部binBit(bin)方法if(bit>d2b.length-1 || bit<0)。所以我认为第一个条件总是正确的,所以它抛出异常。

于 2013-03-31T14:07:19.313 回答
0

如果您输入的位对于该数字来说太大,则您得到的异常是正常结果。例如,假设您输入“3”作为数字。然后 d2b 将是数组 [1,1],即 3 的二进制表示。这意味着您可以为该位输入值 0 或 1。任何比这更大的东西,你都会从检查该条件的代码中得到异常:

if(bit > d2b.length - 1 || bit < 0)
    throw new IndexOutOfRangeException("out of range");

我使用以下输入运行了您的代码(有一些不重要的变化),它运行良好!

Enter number : 255
Enter bit: 3
bite 3 om 1 ast.
Binary of 255 is: 11111111

这能解开谜团吗?

于 2013-03-31T14:25:15.127 回答