无法使用扫描仪类从静态块读取输入

时间:2018-12-22 23:24:13

标签: java exception static java.util.scanner static-initializer

我想在静态块中从用户读取数据,并需要在那里检查某些条件,但是当我尝试调用nextInt()时会导致一些错误

public class Test {
    static int B,H;
    static{
        Scanner s=new Scanner(System.in);
        B=H=0;
        B=s.nextInt();
        H=s.nextInt();
        s.close();
    }
}
  

线程“ main”中的异常java.lang.ExceptionInInitializerError

     

由于:java.util.NoSuchElementException               在java.util.Scanner.throwFor(Scanner.java:862)               在java.util.Scanner.next(Scanner.java:1485)               在java.util.Scanner.nextInt(Scanner.java:2117)               在java.util.Scanner.nextInt(Scanner.java:2076)               在Solution.initialise(Solution.java:21)               在解决方案上。(Solution.java:15)

3 个答案:

答案 0 :(得分:0)

在Java7中,没有主方法就无法编译程序。在此之前,我们可以在不使用main方法的情况下编译程序,但是无法运行该程序。万一您尝试使用Java7之前的任何版本,请尝试在s.close()之后添加System.exit(0)(这将阻止编译器搜索主要方法)。

答案 1 :(得分:0)

尝试进行编译

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Demo {
    static int B,H;
    static boolean flag=false;
    static {
        Scanner s=new Scanner(System.in);
        B=s.nextInt();
        H=s.nextInt();
        s.close();
        if (B<=0 || H<=0)
            System.out.println("java.lang.Exception: Breadth and height must be positive");
        else
            flag=true;
    }
public static void main(String[] args){
        if (flag) {
            int area = B*H;
            System.out.print(area);
        }
    }
}

答案 2 :(得分:0)

public class App {
    static int B, H;
    static {
        Scanner s = new Scanner(System.in);
        B = H = 0;
        B = s.nextInt();
        H = s.nextInt();
        s.close();
    }

    public static void main(String[] args) {

    }
}