我是计算机编程的新手,我正在尝试创建一个程序,从用户的输入中读取最后三个字母,然后检查是否是解锁虚拟安全的正确代码。当用户输入“1”时,我似乎无法让程序关闭,这应该是退出的方式。在静态上下文中引用非静态变量“lock”也存在问题,有什么方法可以解决这个问题吗?感谢您的帮助。
/**
* Gets the last three lettersof the user's input.
*
* @author (Sean F.)
* @version (1.0)
*/
import java.util.Scanner;
public class ComboInput
{
public static void main(String[] args)
{
System.out.println("\f");
Scanner in = new Scanner(System.in);
System.out.print("Enter a letter");
System.out.print("\n");
String input = "";
int comboLength = 0;
input = in.nextLine();
input = input.substring(0,1);
comboLength ++;
Lock q = new Lock();
int lock = q.getLockStatus(input);
String close = "1";
while (comboLength < 3){
System.out.println("\f");
System.out.print("Your letters being used are:");
System.out.print("\n");
System.out.println(input);
System.out.print("Enter another letter or type \"1\" to exit");
System.out.print("\n");
String newInput = in.nextLine();
newInput = newInput.substring(0,1);
input = input+newInput;
comboLength++;
}
while (input.length()>=3){
while((input.substring(2)).equals(close)){
System.out.println("\f");
System.out.println("You gave up, lock is still locked");
System.exit(0);
}
while(!((input.substring(2)).equals(close))){
while (lock == 0){
while (comboLength >= 3){
System.out.println("\f");
System.out.print("Your letters being used are:");
System.out.print("\n");
System.out.println(input.substring(comboLength-3));
System.out.print("Enter another letter or type \"1\" to exit");
System.out.print("\n");
String newInput = in.nextLine();
newInput = newInput.substring(0,1);
input = input+newInput;
comboLength++;
int lock2 = q.getLockStatus(input);
lock = lock2;
}
}
while (lock == 1){
System.out.println("\f");
System.out.println("Your Combination is Correct. Unlocked");
System.exit(0);
}
}
}
}
}
这是该计划的第二部分。这是一个名为Lock的类
/**
* Gives the current status of the lock
*/
public class Lock
{
private String code;
/**
* Constructs the correct code for the lock
*/
public Lock()
{
code = "smf";
}
/**
*
*
* @return An integer to describe whether lock is open or not
*/
public int getLockStatus(String c)
{
if (c.equalsIgnoreCase(code)){
return 1;
}
else{
return 0;
}
}
答案 0 :(得分:0)
如果用户输入1,我肯定看不到任何要退出的代码,即使提示说明了这一点。您可以通过在newInput = newInput.substring(0,1);
之后添加此代码来解决此问题:
if (newInput.equals(close))
System.exit(0);
顺便说一句,该代码中包含大约20个不同的错误。我将为您省去麻烦并为您编写代码:
import java.util.Scanner;
public class ComboInput {
Scanner in = new Scanner(System.in);
System.out.print("Please enter the combination, or 1 to exit: ");
String combo = in.readLine();
if (combo.equals("1"))
System.exit(0);
if (combo.equals("smf"))
System.out.println("That is the correct combination. The safe is open.");
else
System.out.println("Incorrect combination.");
}
研究这段代码,找出它的工作原理,并将其作为编写简单代码的一课。
如果您坚持使用Lock
类,则只需更改一行。看看你是否能搞清楚。