Java 程序无限循环
我编写的程序接受用户的命令并执行特定的功能。但是,文件的读写输入功能有问题,导致循环无限期运行Java 程序无限循环,java,Java,我编写的程序接受用户的命令并执行特定的功能。但是,文件的读写输入功能有问题,导致循环无限期运行 import java.util.HashMap; import java.util.Scanner; public class cShell{ static String Currentpath="C:\\"; public String Current = Currentpath; static HashMap<String, ICommand>
import java.util.HashMap;
import java.util.Scanner;
public class cShell{
static String Currentpath="C:\\";
public String Current = Currentpath;
static HashMap<String, ICommand> myhashData=new HashMap<String, ICommand>();
public static void main(String[] args)
{
myhashData.put("ltf", new cITF());
myhashData.put("nbc", new cNBC());
myhashData.put("gdb", new cGDB());
myhashData.put("Tedit", new cTedit());
do
{
System.out.print(Currentpath+"> ");
String Input = null;
Scanner scan = new Scanner(System.in);
if(scan.hasNext()){
Input = scan.nextLine().trim();
}
//if(Input.equals("exit")){
// System.exit(0);
//}
if(myhashData.containsKey(Input))
{
ICommand myCommand=myhashData.get(Input);
myCommand.Execute();
}
else
{
System.out.println("Invalid Command");
}
}while(!"Input".equals("exit"));
}
}
问题是,在读写之后,程序输出消息“Invalid Command”,该消息是在类cShell中定义的。有人能告诉我这是什么原因吗?do while循环将永远运行,因为它的终止条件是:
!"Input".equals("exit")
字符串“Input”
将永远不会等于字符串“exit”
。您可能需要使用变量输入
:
!input.equals("exit")
注意:
- 尝试遵循Java命名约定。方法/变量使用“mixedCase”,类/接口使用“CamelCase”。换句话说,变量名应该是
,而不是input
input
!"Input".equals("exit")
字符串“Input”
将永远不会等于字符串“exit”
。您可能需要使用变量输入
:
!input.equals("exit")
注意:
- 尝试遵循Java命名约定。方法/变量使用“mixedCase”,类/接口使用“CamelCase”。换句话说,变量名应该是
,而不是input
input
while(!"Input".equals("exit"));
到
由于“输入”
永远不能等于“退出”
条件始终为真,因此它无限循环
对于NPE,您可以添加空检查
finally{
try{
if(cin != null)
cin.close();
if(out != null)
out.close();
}
catch(IOException e)
{
System.out.println("File did not close");
}
}
改变
到
由于“输入”
永远不能等于“退出”
条件始终为真,因此它无限循环
对于NPE,您可以添加空检查
finally{
try{
if(cin != null)
cin.close();
if(out != null)
out.close();
}
catch(IOException e)
{
System.out.println("File did not close");
}
}
是的,确实如此,但还有另一个问题,Invalid I declared contains null不能与.equal运算符一起使用…然后不要将其初始化为null。使用空字符串“”。可以,但我还有一个问题。。。线程“main”java.lang.NullPointerException中的异常位于cShell.main(cShell.java:49)的cTedit.Execute(cTedit.java:100)处,它指向Tedit类中的out.close()。如果我将其从.close()中删除,程序将进入无限循环,并显示以下消息:C:\kaka(访问被拒绝)C:\\kaka>输入要编辑的文件名编辑文件-按Ctrl+z结束错误:C:\kaka(访问被拒绝)C:\\kaka>输入要编辑的文件名编辑文件-按Ctrl+z结束(C:\\kaka相当于cShell.Currentpath)它仍然做同样的事情…无限循环…原因可能是什么…?完全正确,但还有另一个问题,无效的I声明包含null,不能与.equal运算符一起使用…然后不要将其初始化为null。使用空字符串“”是的,它可以工作,但我还有一个问题…线程“main”java.lang.NullPointerException在cTedit.Execute(cTedit.java:100)在cShell.main(cShell.java:49)中出现异常,它指向Tedit类中的out.close()。如果我删除这个out.close(),程序将进入无限循环,并显示错误消息:C:\kaka(访问被拒绝)C:\\kaka>输入要编辑的文件名编辑文件-按Ctrl+z结束错误:C:\kaka(访问被拒绝)C:\\kaka>输入要编辑的文件名编辑文件-按Ctrl+z结束(C:\\kaka相当于cShell.Currentpath)它仍然做同样的事情…无限循环…原因可能是什么?我已经改变了这一点,现在输入带红色下划线…我认为这是因为它包含声明的null,不能与一起使用。equalDeclare它作为空字符串
“”
。当然,这取决于您尝试执行的操作。我已经更改了这一点,现在输入带红色下划线…我认为这是因为它包含声明的null,不能与一起使用。equalDeclare它作为空字符串“”
。当然,这取决于您尝试执行的操作。