2013-11-03 38 views
0

我对计算机编程非常陌生,并且正在尝试创建一个程序来读取用户输入中的最后三个字母,然后检查它是否是正确的代码解锁一个虚拟保险箱。当用户输入本应该退出的方式时,我似乎无法让程序关闭。在静态上下文中引用非静态变量“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); 
      } 
     } 
    } 
} 

}

这是该计划的第二部分。这是一个被称为锁定

/** 
* 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

我建议你重写代码,以免它受到如此的折磨。例如。 while循环中的System.exit(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类,则只需要更改一行。看看你能否弄清楚。