if 语句退出程序

if statement to exit from program

提问人:Naa-ilah Daniels 提问时间:1/9/2015 更新时间:1/9/2015 访问量:254

问:

假设您有一个二进制文件,其中包含类型为 int 或 double 的数字。您不知道文件中数字的顺序,但它们的顺序记录在文件开头的字符串中。该字符串由字母 i 表示 int 和 d 表示 double 组成,按后续数字类型的顺序排列。字符串是使用 writeUTF 方法编写的。

例如,字符串“iddiiddd”表示文件包含八个值,如下所示:一个整数,后跟两个双精度,后跟两个整数,后跟三个双精度。

我的问题是,如果字符串中的字母多于数字,我该如何创建一个 if 语句,告诉用户他们试图读取的文件中存在错误?

我尝试使用它,其中“count”是数字的数量,“length”是字符串的长度,但这不起作用。

    if(count!=length){
        System.out.println("Error in file: Length of string and numbers are not equal");
        System.exit(0);
    }

我的代码的其余部分是这样的:

public static void main(String[] args) {

    Scanner keyboard=new Scanner(System.in);
    System.out.print("Input file: ");
    String fileName=keyboard.next();
    int int_num_check=0;
    double double_num_check=9999999999999999999999999999.999999999;
    int int_num=0;
    double double_num=0.0;
    int count=0;

    try{
        FileInputStream fi=new FileInputStream(fileName);
        ObjectInputStream input=new ObjectInputStream(fi);

        String word=input.readUTF();
        int length=word.length();

        for(int i=0;i<length;i++){

            if(word.charAt(i)=='i'){
                int_num=input.readInt();
                System.out.println(int_num);
                if(int_num>int_num_check){
                    int_num_check=int_num;
                }
            }

            else if(word.charAt(i)=='d'){
                double_num=input.readDouble();
                System.out.println(double_num);
                if(double_num<double_num_check){
                    double_num_check=double_num;
                }
            }

            else{
                System.out.println("Error");
                System.exit(0);
            }
            count++;

        }

        System.out.println("count: "+count);
        System.out.println("length "+length);

        if(count!=length){
            System.out.println("Error in file: Length of string and numbers are not equal");
            System.exit(0);
        }

         String checker=input.readUTF();
            if(!checker.equals(null)){
                System.out.println("Error");
                System.exit(0);
            }

        input.close();
        fi.close(); 

}
    catch(FileNotFoundException e){
        System.out.println("Error");
        System.exit(0);
    }
    catch(EOFException e){

        System.out.println("Largest integer: "+int_num_check);
        System.out.println("Smallest double: "+double_num_check);
        System.exit(0);
    }
    catch(IOException e){
        System.out.println("Error");
        System.exit(0);
        }


}

}

Java IF-语句 二进制文件

评论

0赞 Compass 1/9/2015
除非我弄错了,否则当没有更多内容要阅读时,您的应用程序将抛出异常(或双重)。您可以在发生这种情况时捕获异常并处理该异常。input.readInt();
0赞 Naa-ilah Daniels 1/9/2015
我已经包含了我能想到的所有异常,只是当我测试这个程序并预期错误时,我没有收到错误,我想知道为什么我没有收到错误?
0赞 Mateus Viccari 1/9/2015
你能发布文件的内容吗?
0赞 Naa-ilah Daniels 1/9/2015
文件显示“idid 8 4.33316 2”@MateusViccari
1赞 Naa-ilah Daniels 1/9/2015
它是使用 ObjectOutputStream 编写的。它不是我自己写的,它是给我的,让我为即将到来的测试@MateusViccari练习我的代码

答:

0赞 Bruce 1/9/2015 #1

如果字母数多于数字数,则可能已到达文件末尾 (eof)。在读取每个文件后检查 eof 以获取数字,如果在读取所有预期数字之前到达 eof,则报告错误。

评论

0赞 Naa-ilah Daniels 1/9/2015
但是我不是已经这样做了吗?还是我做错了?
0赞 Mateus Viccari 1/9/2015 #2

我认为问题可能出在文件的创建方式上。尝试使用以下代码创建它:

try {
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:/temp/file.txt"));
    oos.writeUTF("idid");
    oos.writeInt(8);
    oos.writeDouble(4.33316);
    oos.writeInt(2);
    oos.flush();
    oos.close();
} catch (Exception ex) {
    ex.printStackTrace();
}

然后使用您的代码读取它,它应该抛出一个 EOFException。

0赞 NuTTyX 1/9/2015 #3

如果您有更多整数/双精度的字母,您的代码将转到 的捕获,但那里没有关于 EOF 的代码,但出于某种原因您打印了最大/最小的值。EOFException

由于 EOF 异常应该仅在字母多于数字时才会出现(因为您是根据 的长度进行读取的),因此您应该移动到捕获您的word

System.out.println("Error in file: Length of string and numbers are not equal");
System.exit(0);