当前位置: 首页 > 知识库问答 >
问题:

退出程序的if语句

丁景山
2023-03-14

假设您有一个二进制文件,其中包含类型为int或double的数字。您不知道文件中数字的顺序,但它们的顺序记录在文件开头的字符串中。字符串由表示int的字母i和表示double的字母d组成,按后续数字类型的顺序排列。字符串是使用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);
        }


}

}

共有3个答案

莘欣怿
2023-03-14

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

由于只有当字母多于数字时,EOF异常才会上升(因为您是根据单词的长度进行读取的),所以您应该进入捕捉

System.out.println("Error in file: Length of string and numbers are not equal");
System.exit(0);
郗丰
2023-03-14

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

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();
}

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

穆建元
2023-03-14

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

 类似资料:
  • 23.9 程序退出 每个SpringApplication都会向JVM注册一个关闭钩子,以确保在退出时ApplicationContext被正常关闭。所有标准的Spring的生命周期回调(如DisposableBean接口或@PreDestroy注解)都可以使用。 另外,如果希望bean在SpringApplication.exit()被调用时返回特定的退出码,那么bean可以实现org.spri

  • 问题内容: 有哪些方法可以过早退出子句? 有时候,我在编写代码时希望将一条语句放在子句中,只是要记住,这些语句只能用于循环。 让我们以以下代码为例: 我可以想到一种方法:假设退出情况发生在嵌套的if语句内,请将剩余的代码包装在一个大的else块中。例: 问题是更多的退出位置意味着更多的嵌套/缩进代码。 另外,我可以编写我的代码以使子句尽可能小,并且不需要任何退出。 有人知道退出子句的好/更好的方法

  • 为了响应特定的输出,检查if语句中的退出状态的最佳方法是什么? 我在想 我还有一个问题,退出语句位于if语句之前,因为它必须有退出代码。而且,我知道我做错了什么,因为退出显然会退出程序。

  • 注册退出回调 # atexit_simple.py import atexit def all_done(): print('all_done()') print('Registering') atexit.register(all_done) print('Registered') # atexit_multiple.py import atexit def my_clea

  • 我对if else语句有些问题,请支持