qq_52694383
夜凉遗梦⌒
2021-01-15 12:13
采纳率: 100%
浏览 32
已采纳

for循环中加入has判断 就挑跳不出来了,怎么解决?

for循环中加入has判断 就挑跳不出来了,求大佬解答
下面是代码

package shopping;

import java.util.Scanner;

public class jieMian {
    public static void main(String[] args) {
        denglu();

    }

    public static void denglu() {
        //声明
        String name = "admin";
        int num = 123;
        int a;
        System.out.println("\t\t欢迎使用我行我素购物管理系统!");
        System.out.println("\t\t1.登录系统");
        System.out.println("\t\t2.退出");
        System.out.println("***************************************");
        Scanner input = new Scanner(System.in);
        for (; ; ) {
            System.out.println("请选择,输入数字:");
            if (input.hasNextInt()) {
                a = input.nextInt();
                if (a == 1) {
                    for (; ; ) {
                        System.out.println("请输入账号:");
                        String name1 = input.next();
                        System.out.println("请输入密码:");
                        int num1 = input.nextInt();
                        if (name1.equals(name) && num1 == num) {
                            break;
                        } else {
                            System.out.println("用户名密码错误,请重新输入!");
                        }
                    }
                    break;
                } else if (a == 2) {
                    System.out.println("欢迎下次光临!");
                    break;
                } else {
                    System.out.println("输入错误,请重新输入!");
                }
            } else {
                System.out.println("输入错误,请重新输入!");
                continue;
            }
        }
    }
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • huangzhigao886
    被风吹过的回忆 2021-01-15 13:42
    已采纳

    通过断点调试是可以看出这个问题,如果想继续输入,可以在改成这种方式

           else {
                    System.out.println("输入错误,请重新输入!");
                 
                    input = new Scanner(System.in);
                    continue;
                }
    点赞 评论
  • huangzhigao886
    被风吹过的回忆 2021-01-15 13:40

    你的hasNextInt在输入字符串后,判断为false,后续的hasNext就会一直为false,你的input会一直是has这个字符

    点赞 评论
  • qq_38225558
    郑清 2021-01-15 14:24
    import java.util.Scanner;
    
    /**
     * <p>
     * 解决for循环中加入has判断跳不出来问题
     * </p>
     *
     * @author : zhengqing
     * @description : 通过`input.nextLine();`解决; TODO 注意异常控制! ex: input.nextInt()
     * @date : 2021/1/15 13:48
     */
    public class Problem_01 {
    
        public static void main(String[] args) {
            String username = "admin";
            int password = 123;
            int result;
    
            System.out.println("\t\t欢迎使用我行我素购物管理系统!");
            System.out.println("\t\t1.登录系统");
            System.out.println("\t\t2.退出");
            System.out.println("***************************************");
    
            Scanner input = new Scanner(System.in);
            boolean flag = true;
            while (flag) {
                System.out.println("请选择,输入数字:");
                boolean inputContent = input.hasNextInt();
                if (!inputContent) {
                    System.out.println("输入错误,请重新输入!");
                    input.nextLine();
                }
                if (inputContent) {
                    result = input.nextInt();
                    switch (result) {
                        case 1:
                            for (;;) {
                                System.out.println("请输入账号:");
                                String usernameByInput = input.next();
                                System.out.println("请输入密码:");
                                int passwordByInput = input.nextInt();
                                if (usernameByInput.equals(username) && passwordByInput == password) {
                                    flag = false;
                                    System.out.println("登录成功...");
                                    break;
                                } else {
                                    System.out.println("用户名密码错误,请重新输入!");
                                    input.nextLine();
                                }
                            }
                            break;
                        case 2:
                            System.out.println("欢迎下次光临!");
                            flag = false;
                            break;
                        default:
                            System.out.println("输入错误,请重新输入!");
                            input.nextLine();
                            break;
                    }
                }
            }
        }
    
    }
    点赞 评论
  • qq_36911145
    封印di恶魔 2021-01-15 16:03

    运行过了,代码没毛病,你说什么跳不出来

    点赞 评论
  • qq_36911145
    封印di恶魔 2021-01-15 16:12

    输入字符串后hasNextInt是false会调用else,然后之前输出的东西还在输入流里没有被消耗掉

    所以循环后调用hasNextInt不会让你输出新的值,而是把原本字符串值直接哪来判断,所以造成死循环

    只要把错误的值消耗掉就行了

    if (input.hasNextInt()) {
        ...............
    } else {
        // 读取之前输入的值
        String b = input.next();
        System.out.println("输入错误,请重新输入!");
        continue;
    }
    点赞 评论

相关推荐