在Java中创建readKey方法

时间:2018-01-31 17:43:30

标签: java

我试图在Java中创建静态方法,它将返回从键盘输入的用户收集的String。非静态方法readKey工作正常但不是创建BufferedReader我需要创建ATM类的实例。

public class ATM {

    public String readKey() {
        String key = null;
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        try {
            key = bufferedReader.readLine();
        } catch (IOException e) {

            e.printStackTrace();
        }
        try {
            bufferedReader.close();
        } catch (IOException e) {

            e.printStackTrace();
        }
    return key;
    }
    public static String rKey() {
        String key = null;
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        try {
            key = bufferedReader.readLine();
        } catch (IOException e) {

            e.printStackTrace();
        }
        try {
            bufferedReader.close();
        } catch (IOException e) {

            e.printStackTrace();
        }

    return key;
    }



    public static void main(String[] args) {


            String cardNumber = rKey();


            String cardPin = rKey();



    }
}

在提供一些输入并按下输入时,我收到以下错误:

java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at packageX.ATM.rKey(ATM.java:31)
at packageX.ATM.main(ATM.java:68)

谢谢你的时间,希望我的问题得到很好的描述。

1 个答案:

答案 0 :(得分:0)

首先,“DRY输出”您的代码。

rKeyreadKey正在做同样的事情。

您的错误发生是因为第一个rKey()已关闭System.in,因此第二个将失败,因为只有一个System.in,并且不应在应用程序的整个生命周期内关闭如果你打算继续使用它。

您可以按照此模式进行非静态用途。

class ATM {
    private Scanner sc = new Scanner(System.in);

    public String readKey() {
        String key = null;
        if (sc.hasNextLine()) {
            key = sc.readLine();
        }
        return key;
    }

    public static void main(String[] args) {
        ATM a = new ATM();

        String cardNumber = a.readKey();
        String cardPin = a.readKey();
    }
}
  

非静态方法readKey工作正常但不是创建BufferedReader我需要创建ATM类的实例

是的,因为你cannot access a non-static resource from a static context