Java 变量在案例结束时消失

Java 变量在案例结束时消失,java,Java,我有一个问题,因为我不知道如何保存变量。变量newname和newpassword deafult为零。但在案例1中,它们被更改为给定值,但在案例1之后,变量返回到基本值0。我无法登录(在案例2中),因为登录名和密码始终为0。如何在案例1中全局设置此变量 String newname = null; String newpassword = null; System.out.println("Hello!"); System.out.println();

我有一个问题,因为我不知道如何保存变量。变量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;
    }
}

}这里有很多问题

  • 您缺少一个
    中断在第一个案例之后
  • 如果变量只是方法中的局部变量,并且您反复调用该方法,那么在调用之间它们的内容就会被忘记,那么您可能会遇到变量的作用域问题
  • 您正在使用
    ==
    比较字符串,请在此处阅读更多信息=>
  • 正确代码:

    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;
        }
    
    }
    

    这一行的问题之一是:

       if (pass1 == newname & pass2 == newpassword){
          System.out.println("you are logged in");
         }else{
         System.out.println("incorrect passoword or login");
          }
    
    如果您要调试此代码,您将注意到此
    If
    语句没有 比较字符串的值。有关更多详细信息,请访问:

    请尝试以下代码:

            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.如果用户输入无效,而不是进入默认值,程序也将再次要求用户写入一个数字

    尝试更改比较字符串的方式,同时使用java逻辑运算符而不是按位&

    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;
        }
    }
    

    我不想比较字符串,我想在案例1中全局设置字符串。我认为案例1和案例2之间没有中断。这可能是问题的原因,也可能是因为放断了;在任何情况下,这看起来都像是一个范围问题。这段代码在类中吗?主要的?方法?因为变量是在它里面声明的,所以只要它运行,它们就会一直处于“活动”状态,但一旦它完成,就不会@马辛-这是一个好的开始:@GregArtisi我想他可能错过了
    休息有意,因为注册后用户必须登录。这只是我个人的意见!