首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nextLine()方法不接受输入。但是next()有。为什么会这样呢?

nextLine()方法不接受输入。但是next()有。为什么会这样呢?
EN

Stack Overflow用户
提问于 2014-04-09 15:37:26
回答 1查看 375关注 0票数 0

我正在使用Fretts。下面是代码片段。

代码语言:javascript
复制
public static void main(String[] args){
Scanner src=new Scanner(System.in);
String st,classname,filename;
int input=0;
char O_curlybrace,O_roundbrace,C_curlybrace,C_roundbrace;
File f=null;
boolean boo=false;
try
{
System.setProperty("freetts.voices",
com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory");
Central.registerEngineCentral
        ("com.sun.speech.freetts.jsapi.FreeTTSEngineCentral");
        Synthesizer synthesizer =
        Central.createSynthesizer(new SynthesizerModeDesc(Locale.US));
        synthesizer.allocate();
        synthesizer.resume();
        System.out.println("Welcome to world of programming");
        synthesizer.speakPlainText("Welcome to world of programming", null);            
        synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
        synthesizer.speakPlainText("Start your java programming now.", null);
        System.out.println("Start your java programming now");
        synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
        synthesizer.speakPlainText("Enter your file name", null);
        System.out.println("Enter your file name");
        st=src.next();
        st=
        filename=st.substring(0,1).toUpperCase();
        classname=filename.concat(st.substring(1));
        synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
        synthesizer.speakPlainText("Creating new java file", null);
        System.out.println("Creating new java file");
        synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
        FileWriter fstream = new FileWriter(classname+".txt",true);
        BufferedWriter output = new BufferedWriter(fstream);
        output.write("import java.io.*;");
        output.newLine();
        output.append("import java.util.*");
        output.newLine();
        synthesizer.speakPlainText("File created", null);
        System.out.println("File created: ");
        synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
        synthesizer.speakPlainText("Importing basic packages.", null);
        System.out.println("Importing basic packages.");
        synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
        Thread.sleep(1500);
        synthesizer.speakPlainText("Packages imported.", null);
        System.out.println("Packages imported");
        Thread.sleep(500);
        synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
        synthesizer.speakPlainText("Enter 1 to create public class", null);
        System.out.println("Enter 1 to create public class");
        synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
        input=src.nextInt();
        if(input==1)
        {
            synthesizer.speakPlainText("Creating public class", null);
            System.out.println("Creating public class");
            synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
            Thread.sleep(2000);
            synthesizer.speakPlainText("Done", null);
            System.out.println("Done.");
            synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
            output.write("public class "+classname);
            output.newLine();
            output.append("{");
            output.newLine();

        }            
        synthesizer.speakPlainText("Press 2 to create main function", null);
        System.out.println("Press 2 to create main function");
        input=src.nextInt();
        if(input==2)
        {
            synthesizer.speakPlainText("Creating main function", null);
            System.out.println("Creating function");
            synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
            Thread.sleep(2000);
            synthesizer.speakPlainText("Done", null);
            System.out.println("Done.");
            synthesizer.waitEngineState(Synthesizer.QUEUE_EMPTY);
            output.write("public static void main(String args[]) ");
            output.newLine();
            output.append("{");
            output.newLine();
        }
        synthesizer.speakPlainText("Press 3 to print something", null);
        System.out.println("Press 3 to print something");
        input=src.nextInt();
        if(input==3)
        {
            synthesizer.speakPlainText("Type something that you want to print", null);
            System.out.println("Type something that you want to print:");
            String print=src.nextLine();
            output.write("System.out.println(\""+print+"\");");
            output.close();
        }
        synthesizer.deallocate();
     }
    catch(Exception e)
    {
    }

第2行和第3行执行得很好,但第3行开始的程序被终止。如果我使用的是next()而不是nextLine(),那么它将完美地工作。如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-09 15:46:16

我认为看到更多的代码是有帮助的。我注意到在代码片段中没有声明src。src以前用过吗?

如果以前使用过,那么src的缓冲区可能不是空的。例如,.nextInt()将把enter字符留在缓冲区中,因为它不是整数。如果enter字符仍在缓冲区中,.nextLine()将将其读取为空行。您可以尝试在src.nextLine()之前调用.println()并丢弃输入。这将清除缓冲区。

编辑:好的,这就是问题所在:

代码语言:javascript
复制
input=src.nextInt();

你输入了两样东西,数字和eol字符。.nextInt()将eol字符留在缓冲区中,所以下次调用.nextLine()时,它会读取缓冲区,查看eol字符,并假设您只是输入了空行。因此,print = "“此处:

代码语言:javascript
复制
String print=src.nextLine();

我会用两个扫描器,一个用于ints,另一个用于字符串。或者在调用.nextLine()之前清除缓冲区。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22967460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档