在java项目中打开和关闭2个不同的扫描程序

时间:2018-04-30 21:31:04

标签: java java.util.scanner

这是我正在做的超简化代码,但结果是一样的。我可以在第1类中注释掉in.close(),它将修复错误。但是接下来我将为项目的其余部分留下一个开放的扫描仪。并且更改变量名称不是解决方法。

的Class1:

package scannerDebug;
import java.util.Scanner;

public class Class1 {
    private String name_;

public Class1(String name)  {
    name_ = name;   }

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.print("Your name: ");
    Class1 ex1 = new Class1(in.next());
    System.out.println("eex1" + ex1.name_);
    in.close(); 
    }
}

的Class2

package scannerDebug;

import java.util.Scanner;

public class Class2 {
private String name_;

public Class2(String name)  {
    name_ = name;   }

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    System.out.print("Your name: ");
    Class2 ex2 = new Class2(in.next());
    System.out.println("ex2" + ex2.name_);
    in.close();
    }
}

驱动程序类     package scannerDebug;

public class driver {

public static void main(String[] args) {
    Class1.main(args);
    Class2.main(args);

}

}

1 个答案:

答案 0 :(得分:1)

关闭Scanner也会关闭基础流。要解决此问题,只需在Scanner课程中使用一个driver,并在Class1Class2中使用它:

public class driver {
    private static final SCANNER = new Scanner(System.in);

    public static void main(String[] args) {
        Class1.main(args);
        Class2.main(args);
    }

    public static Scanner getScanner() {
        return SCANNER;
    }
}
public Class2(String name) {
    name_ = name;
}

public static void main(String[] args) {
    System.out.print("Your name: ");
    Class2 ex2 = new Class2(driver.getScanner().next());
    System.out.println("ex2" + ex2.name_);
}

我建议您遵循适当的约定并更改您的变量/类名。

您也可以通过各自的构造函数将Scanner传递给每个类,但我认为您可能希望在不先运行Class1的情况下运行Class2driver。< / p>