调试Java程序-字节转换器

调试Java程序-字节转换器,java,debugging,Java,Debugging,问题: 编写一个程序,通过将给定数量的字节转换为以下格式之一,将其转换为更易于阅读的格式:字节、千字节、兆字节、千兆字节或兆字节。例如,1024字节将是1.00KB(KB=KB) 下面是我一直试图调试的代码,但迄今为止还没有成功。考虑到下面的错误消息,我不知道我将在哪里除以零 import java.text.DecimalFormat; import java.util.Scanner; class ByteConverter { public static void main(S

问题:

编写一个程序,通过将给定数量的字节转换为以下格式之一,将其转换为更易于阅读的格式:字节、千字节、兆字节、千兆字节或兆字节。例如,1024字节将是1.00KB(KB=KB)

下面是我一直试图调试的代码,但迄今为止还没有成功。考虑到下面的错误消息,我不知道我将在哪里除以零

import java.text.DecimalFormat;
import java.util.Scanner;

class ByteConverter {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan1 = new Scanner(System.in);
        DecimalFormat df = new DecimalFormat("#.00");
        long input1;
        long conversionKilobyte;
        long conversionMegabyte;
        long conversionGigabyte;
        long conversionTerabyte;


        System.out.print("Enter number of bytes: ");
        input1 = scan1.nextLong();

        conversionKilobyte = input1 / 1024;
        conversionMegabyte = input1 / 1048576;
        conversionGigabyte = input1 / 1073741824;
        conversionTerabyte = input1 / (long).1099511627776;

        if (input1 > (long).1099511627775) {
            System.out.println(input1 + " " + "Bytes is" + " " + conversionTerabyte + " " + "TB");
        } else if (input1 >= 1073741824 && input1 <= (long).1099511627776) {
            System.out.println(input1 + " " + "Bytes is" + " " + conversionGigabyte + " " + "GB");
        } else if (input1 >= 1048576 && input1 <= 1073741823) {
            System.out.println(input1 + " " + "Bytes is" + " " + conversionMegabyte + " " + "MB");
        } else if (input1 >= 1024 && input1 <= 1048575) {
            System.out.println(input1 + " " + "Bytes is" + " " + conversionKilobyte + " " + "KB");
        } else {
            System.out.println(input1 + " " + "Bytes is" + " " + df.format(input1) + " " + "B");
        }

    }
}
导入java.text.DecimalFormat;
导入java.util.Scanner;
类字节转换器{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
扫描仪scan1=新扫描仪(System.in);
DecimalFormat df=新的DecimalFormat(#.00”);
长输入1;
长转换千字节;
长转换兆字节;
长转换字节;
长转化率;
System.out.print(“输入字节数:”);
input1=scan1.nextLong();
转换千字节=输入1/1024;
conversionMegabyte=input1/1048576;
conversionigabyte=input1/1073741824;
ConversionTrabayte=input1/(长)。109951162776;
如果(输入1>(长).109951162775){
System.out.println(input1++“字节”为“++”转换字节+++“TB”);

}否则如果(input1>=1073741824&&input1=1048576&&input1=1024&&input1使用小数点无助于将240转换为
长的
。您实际上提供了
双精度
文本,
.109951162776
,小于1,您正在将其转换为
长的
,从而产生
0

请注意,删除小数点是不够的,因为
109951162776
不是有效的
int
文本;该值太大

使用
L
后缀指定
long
文字

1099511627776L
或者,将
1L
左移40位

1L << 40

1L使用小数点无助于将240转换为
。您实际上提供了
文本,
.109951162776
,小于1,您将其转换为
,从而产生
0

请注意,删除小数点是不够的,因为
109951162776
不是有效的
int
文本;该值太大

使用
L
后缀指定
long
文字

1099511627776L
或者,将
1L
左移40位

1L << 40

1L尝试读取错误消息:

(Error): Exception in thread "main" java.lang.ArithmeticException: / by zero at ByteConverter.main(ByteConverter.java:23

“23”表示行号,因此错误位于第23行(长)。109951162776必须为零

(Error): Exception in thread "main" java.lang.ArithmeticException: / by zero at ByteConverter.main(ByteConverter.java:23

“23”表示行号,因此错误在第23行(长)。109951162776必须为零。您认为
(长)。109951162776
的值是多少?您认为
(长)。109951162776
的值是多少?