如何重复使用我的扫描仪?

时间:2016-06-24 05:57:16

标签: java java.util.scanner

我创建了一个带有用户输入的方法的实用程序类,并返回它的小写版本,因此我没有那么多重复的代码,但它只能使用一次。之后,它不会扫描。我该怎么做才能解决这个问题?

P.S。我见过很多人说重复使用扫描仪是个坏主意。为什么是这样?如果重置扫描仪,那该不行吗?

public String scan() {
    String input;
    Scanner s = new Scanner(System.in);
    if (s.hasNextLine()) {
        input = s.nextLine();
    } else {
        input = "ERROR";
    }
    s.reset();
    s.close();
    return input.toLowerCase();
}

2 个答案:

答案 0 :(得分:0)

每次使用扫描仪进行重置时都是正确的。您的问题的解决方案如下:

将要传递的所有参数添加到数组中的onCreate,并使用Main Activity循环将所有参数传递给getSupportFragmentManager().beginTransaction().setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).replace(R.id.fl_testing, new viewPagerFragment()).commit(); ,同时返回时,再次将它们添加到各自的阵列位置,这样您就可以轻松地在任何地方重复使用它们。

答案 1 :(得分:0)

每次需要阅读一行时,您实际上可以重复使用扫描仪而不是创建一个新扫描仪,这是一个示例:

public class Test {
    public static void main(String[] args) {
        Test t = new Test();
        //create your scanner object
        Scanner s = new Scanner(System.in);
        //send it as a parameter whenever you need to read a line
        System.out.println(t.scan(s));
        System.out.println(t.scan(s));
        System.out.println(t.scan(s));
        //close it after finishing
        s.close();
    }

    public String scan(Scanner s) {
        String input;
        if (s.hasNextLine()) {
        input = s.nextLine();
        } else {
           input = "ERROR";
        }
        return input.toLowerCase();
     }
}

但是如果你为你创建一个reader实用程序类,那么在实用程序类中成为Instance变量更合乎逻辑。

例如:

public class Reader {
    Scanner s ;

    public Reader() {
        s = new Scanner(System.in);
    }

    public String scan() {
        String input;
        if (s.hasNextLine()) {
            input = s.nextLine();
        } else {
            input = "ERROR";
        }
        return input.toLowerCase();
    }

    public void close(){
        s.close();
    }
}

当你使用它时,它会是这样的:

public class Main {
    public static void main(String[] args) {
        //create your scanner object
        Reader r = new Reader();
        //send it whenever you need to read a line
        System.out.println(r.scan());
        System.out.println(r.scan());
        System.out.println(r.scan());
        //close it after finishing
        r.close();
    }
}