They are exact same methods but one works and another does not

Deadly 提交于 2019-12-12 03:37:57

问题


public class L20 {
public static void main(String[] args) throws IOException{
    Scanner input=new Scanner(System.in);

    System.out.println("Enter file name");
    String in=input.nextLine();
    try{
        textWriter(in);
        textReader(in);
        textChanger(in);

    }catch(Exception e){

    }

}

public static void textWriter(String path) throws IOException{
    String[] alphabet=    
 {"a","b","c","d","e","f","g","h","i","j","k","m","l","n","o","p","q","r","s","t","u","v","w","x","y","z"};
File file=new File(path);
Writer output=null;
    Random number=new Random();
    output=new BufferedWriter(new FileWriter(file));
    int lines=10+number.nextInt(11);
    for(int i=0;i<lines;i++){
    int it2=1+number.nextInt(9);
    int n1=number.nextInt(26);
    int n2=number.nextInt(26);
    int n3=number.nextInt(26);

    String t2=Integer.toString(it2);
    String t1=alphabet[n1]+alphabet[n2]+alphabet[n3];
    String text=t1+t2;
    output.write(text);
    ((BufferedWriter) output).newLine();
    }
    output.close();
    System.out.println("Your file has been written");
}

public static void textReader(String path) throws IOException{
    File file=new File(path);
    Scanner input;
    input=new Scanner(file);
    String line;
    while((line=input.nextLine())!=null){
        System.out.println(line);
    }
    input.close();
}

private static void textChanger(String path) throws IOException{
    File file=new File(path);
    Scanner input2;
    input2=new Scanner(file);
    String line;
    while((line=input2.nextLine())!=null){
        System.out.println(line);
    }
    input2.close();
}

}

textWriter works fine. textReader and textChanger are exactly the same! But textReader works fine and textChanger does not! WHy? I even have renamed the scanner for each method. It seems the Text.txt can only be read for once??


回答1:


The problem is that your program is crashing silently in textReader and textChanger is not being called at all. Instead of this:

while((line=input.nextLine())!=null){
    System.out.println(line);
}

you should use this:

while(input.hasNextLine()){
    System.out.println(input.nextLine());
}

Scanner.nextLine() will not return null if there is no more input; it will throw a NoSuchElementException.

In general, don't silently catch exceptions. At least call printStackTrace() or log the problem!



来源:https://stackoverflow.com/questions/13598747/they-are-exact-same-methods-but-one-works-and-another-does-not

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!