该变量在案例结束时消失

时间:2017-12-25 15:20:22

标签: java

我遇到了问题,因为我不知道如何保存变量。变量newname和newpassword deafult为零。但是在情况1中它们被更改为给定值,但在情况1之后变量返回到基本值0.并且我无法登录(在情况2中)因为登录和密码始终为0.我如何全局设置此变量案例1?

    String newname = null;
    String newpassword = null;


    System.out.println("Hello!");
    System.out.println();
    System.out.println("     ****************************************");
    System.out.println("     *                 MENU                 *");
    System.out.println("     ****************************************");
    System.out.println("     1. Create new account");
    System.out.println("     2. Log in");
    System.out.println("     3. Help");
    System.out.println("     0. End");
    Scanner opcje = new Scanner(System.in);
    int choose = opcje.nextInt();

    switch (choose) {

        case 1:

            System.out.println("You choose create new acount\n Enter the login");
            Scanner nlogin = new Scanner(System.in);
            newname = nlogin.nextLine();

            System.out.println("Please enter the password ");
            Scanner npassword = new Scanner(System.in);
            newpassword = npassword.nextLine();
            System.out.println("the account has been created\n");

        case 2:

            Scanner login = new Scanner(System.in);
            System.out.println("Login:");
            String pass1 = login.nextLine();
            System.out.println("Password:");
            Scanner password = new Scanner(System.in);
            String pass2 = password.nextLine();
            if (pass1 == newname & pass2 == newpassword){
                System.out.println("you are logged in");
            }else{
                System.out.println("incorrect passoword or login");
            }
            break;

        case 3:
            System.out.println("Help is off");
            break;

        case 0:
            System.out.println("ending");
            break;

        default:
            System.out.println("Select the option by pressing 1,2,3 or 0");
            break;
    }
}

}

4 个答案:

答案 0 :(得分:0)

这里有很多问题。

  1. 在第一个案例
  2. 之后,您错过了break;
  3. 如果您的变量只是方法中的局部变量,并且您反复调用该方法,那么您可能会在调用之间忽略它们的内容。
  4. 您正在使用==比较字符串,在此处阅读更多内容=> Java String Equals
  5. 正确代码:

    public class MainClass {
        String newname = null;
        String newpassword = null;
        //continue your code here
        //call menu() when required
        menu();
    
    }
    
    
    public void menu()
    {
        System.out.println("Hello!");
        System.out.println();
        System.out.println("     ****************************************");
        System.out.println("     *                 MENU                 *");
        System.out.println("     ****************************************");
        System.out.println("     1. Create new account");
        System.out.println("     2. Log in");
        System.out.println("     3. Help");
        System.out.println("     0. End");
        Scanner opcje = new Scanner(System.in);
        int choose = opcje.nextInt();
    
        switch (choose) 
        {
    
            case 1:
    
                System.out.println("You choose create new acount\n Enter the login");
                Scanner nlogin = new Scanner(System.in);
                newname = nlogin.nextLine();
    
                System.out.println("Please enter the password ");
                Scanner npassword = new Scanner(System.in);
                newpassword = npassword.nextLine();
                System.out.println("the account has been created\n");
                break;
    
            case 2:
    
                Scanner login = new Scanner(System.in);
                System.out.println("Login:");
                String pass1 = login.nextLine();
                System.out.println("Password:");
                Scanner password = new Scanner(System.in);
                String pass2 = password.nextLine();
                if (pass1.equals(newname) & pass2.equals(newpassword)){
                    System.out.println("you are logged in");
                }else{
                    System.out.println("incorrect password or login");
                }
                break;
    
            case 3:
                System.out.println("Help is off");
                break;
    
            case 0:
                System.out.println("ending");
                break;
    
            default:
                System.out.println("Select the option by pressing 1,2,3 or 0");
                break;
        }
    
    }
    

答案 1 :(得分:0)

其中一个问题是这一行:

   if (pass1 == newname & pass2 == newpassword){
      System.out.println("you are logged in");
     }else{
     System.out.println("incorrect passoword or login");
      }

如果您要调试此代码,您会注意到此if语句没有 比较String的值。有关详细信息,您可以访问: https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java

请尝试使用此代码:

        if(pass1.equals(newname) && pass2.equals(newpassword)) 
        {
            System.out.println("you are logged in");
        }else{
            System.out.println("incorrect passoword or login");
        }
第二个问题:

您需要将switch语句放在while循环中:

1.这就是为什么程序不会结束(这样变量)将被保存。

2.IF用户输入无效而不是默认,程序也会再次要求用户写一个号码。

答案 2 :(得分:0)

尝试更改比较字符串的方式,也使用java逻辑运算符代替Bitwise&。

static String newname = null;
static String newpassword = null;
public static void main(String[] args) {

    System.out.println("Hello!");
    System.out.println();
    System.out.println("     ****************************************");
    System.out.println("     *                 MENU                 *");
    System.out.println("     ****************************************");
    System.out.println("     1. Create new account");
    System.out.println("     2. Log in");
    System.out.println("     3. Help");
    System.out.println("     0. End");
    Scanner opcje = new Scanner(System.in);
    int choose = opcje.nextInt();

    switch (choose) {

        case 1:

            System.out.println("You choose create new acount\n Enter the login");
            Scanner nlogin = new Scanner(System.in);
            newname = nlogin.nextLine();

            System.out.println("Please enter the password ");
            Scanner npassword = new Scanner(System.in);
            newpassword = npassword.nextLine();
            System.out.println("the account has been created\n");
        case 2:

            Scanner login = new Scanner(System.in);
            System.out.println("Login:");
            String pass1 = login.nextLine();
            System.out.println("Password:");
            Scanner password = new Scanner(System.in);
            String pass2 = password.nextLine();
            //Java uses equals method to compare Strings
            //Java also uses && as the logical operator for "and"
            if (pass1.equals(newname) && pass2.equals(newpassword)) {
                System.out.println("you are logged in");
            } else {
                System.out.println("incorrect password or login");
            }
            break;

        case 3:
            System.out.println("Help is off");
            break;

        case 0:
            System.out.println("ending");
            break;

        default:
            System.out.println("Select the option by pressing 1,2,3 or 0");
            break;
    }
}

答案 3 :(得分:0)

这是一个范围问题。 目前尚不清楚这段代码是否在类中?主要?方法?

让我们假设这是你的主要:

由于您的变量是在其中声明的,因此他们将“活着”#39;只要它运行,但不是一旦它完成。 @Marcin - 这是一个好的开始:tutorial

基本上你需要声明

String newname = null;
String newpassword = null;

class members,只要您的对象存在,它们就会存活(并且不会被遗忘' ===丢失)