我正在使用Fretts。下面是代码片段。
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(),那么它将完美地工作。如何解决这个问题?
发布于 2014-04-09 15:46:16
我认为看到更多的代码是有帮助的。我注意到在代码片段中没有声明src。src以前用过吗?
如果以前使用过,那么src的缓冲区可能不是空的。例如,.nextInt()将把enter字符留在缓冲区中,因为它不是整数。如果enter字符仍在缓冲区中,.nextLine()将将其读取为空行。您可以尝试在src.nextLine()之前调用.println()并丢弃输入。这将清除缓冲区。
编辑:好的,这就是问题所在:
input=src.nextInt();你输入了两样东西,数字和eol字符。.nextInt()将eol字符留在缓冲区中,所以下次调用.nextLine()时,它会读取缓冲区,查看eol字符,并假设您只是输入了空行。因此,print = "“此处:
String print=src.nextLine();我会用两个扫描器,一个用于ints,另一个用于字符串。或者在调用.nextLine()之前清除缓冲区。
https://stackoverflow.com/questions/22967460
复制相似问题