无法在Java中输入Int之后的String

时间:2015-09-30 13:55:01

标签: java java.util.scanner

我在Main类中输入k和choice(整数)。然后尝试在count类中输入title_name。但是,我无法输入title_name。

//主要课程

    package com.iiitd.ap.lab6;

import java.io.IOException;
import java.util.Scanner;

public class Main {
    static int k;
    static int option;



    public static void main(String[] args) throws IOException {
        Scanner in = new Scanner(System.in);
        k=in.nextInt();
        option=in.nextInt();
        in.close();

        System.out.println(k+" "+option);

        count t=new count(k,option);
        t.count_print();


    }

}

// count class

package com.iiitd.ap.lab6;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class count {
    static int k;
    static int option;

    count(int k, int option)
    {
        count.k= k;
        count.option= option;

    }



    int  decide_file_1() throws IOException
    {

        String title_name="";
        Scanner in=new Scanner(System.in);
        title_name=in.next();
        System.out.println("ttt");
            in.close();

        for(int i=1;i<=20;++i){
        FileInputStream fs= new FileInputStream("/home/tarun/Downloads/Lab6/Papers/paper"+i+".txt");
        BufferedReader br = new BufferedReader(new InputStreamReader(fs));
        System.out.println(title_name+" "+br.readLine());
            if(title_name.equals(br.readLine()))
                return i;               

        }

        return 0;

    }





    int count_print() throws IOException
    {
        if(option==1)
        {   
            System.out.printf("decide_file=%d",decide_file_1());

        }
        return 0;

    }




}

非常感谢任何形式的帮助。

2 个答案:

答案 0 :(得分:2)

您正在通过调用System.in关闭标准输入流(in.close()

来自Scanner#close() javadoc

  

如果此扫描程序尚未关闭,则如果其底层可读也实现了Closeable接口,则将调用可读的close方法。如果此扫描程序已关闭,则调用此方法将不会效果。

这意味着它将调用输入流的 close()方法,关闭流并断开读取控制台与java程序之间的连接。

因此,您不能再在程序中使用System.in流(如果您使用的是新的Scanner()对象则无关紧要。)

答案 1 :(得分:0)

您正在阅读该行两次:

System.out.println(title_name+" "+br.readLine());
        if(title_name.equals(br.readLine()))
            return i;  

在打印和比较之前存储该值。读完线后,读者就会前进。因此,第二个readLine()调用将获取流中的下一行。

String title = br.readLine();
System.out.println(title_name+" "+title);
            if(title_name.equals(title))
                return i;