A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package cn.itcast.test;

import java.util.Scanner;

import cn.itcast.dao.impl.UserImply;
import cn.itcast.pojo.Student;

public class UserTest {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //根据用户输入,分别进行用户登陆和注册
                System.out.println("请选择功能");
                System.out.println("1----注册用户");
                System.out.println("2----登陆判断");
                System.out.println("其他键----退出");
                Scanner sc = new Scanner(System.in);
                Integer i = sc.nextInt();
                //新建一个学生对象,方便下面封装
                Student s = new Student();
        //对功能类进行实例化,方便使用登陆和注册功能
                UserImply ui = new UserImply();
                while (true) {
                        switch (i) {
                        //选注册功能
                        case 1: {
                                System.out.println("--------注册界面---------");
                                System.out.println("请输入姓名");   
??????? 在运行的时候,只能接入一行数据,直接出来“请输入姓名,请输入密码“,没有停顿
                                String name = sc.nextLine();
                                System.out.println("请输入密码");
                                String password = sc.nextLine();
                                //进行对象封装
                                s.setName(name);
                                s.setPassword(password);
                                //调用功能保存用户信息
                                ui.add(s);
                                System.out.println("add success");
                                break;
                        }
                        case 2: {
                                System.out.println("--------登陆界面---------");
                                System.out.println("请输入姓名");
                                String name1 = sc.nextLine();
                                System.out.println("请输入年龄");
                                String password1 = sc.nextLine();
                                s.setName(name1);
                                s.setPassword(password1);
                                //进行判断
                                if (ui.islogin(s)) {
                                        System.out.println("login success");
                                        break;
                                } else {
                                        System.out.println("login failed");
                                }
                        }

                //输出其他键,则退出2
                        default:
                                System.out.println("欢迎下次再来");
                                System.exit(0);
                                break;

                        }

                }

        }

}
------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------



package cn.itcast.dao.impl;

import java.util.ArrayList;

import cn.itcast.pojo.Student;

public class UserImply {

        ArrayList<Student> arr = new ArrayList<Student>();

        // 对传进来的值进行封装;
        public void add(Student s) {

                arr.add(s);
        }

        public boolean islogin(Student s) {
                // 使用for的增强功能,对集合过行遍历,与传进来的学生对象进行比较,判断登陆是否成功
                for (Student ss : arr) {
                        if (ss.getName().equals(s.getName()) && ss.getPassword() == s.getPassword()) {
                                return true;
                        }
                }
                return false;

        }
}

23 个回复

倒序浏览
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入姓名");
        String username = sc.nextLine();
        System.out.println("请输入密码");
        String password = sc.nextLine();
回复 使用道具 举报
我知道,但是运行第一次的时候就是不行,平常这样输是可以的
回复 使用道具 举报
代码太多,一瞬间看不懂的感觉。
回复 使用道具 举报
本帖最后由 牧师1990 于 2015-7-9 00:25 编辑

我觉得是不是两次键盘输入的类型问题?当录入数据依次是int String,并且分别使用nextInt()和next()方法获取数据的时候,会接受不到String数据。就会出现你说的问题
在上面:Integer i = sc.nextInt();你是想输入字符串类型吧,为什么不直接用String?
下面是  String name = sc.nextLine()

回复 使用道具 举报
牧师1990 发表于 2015-7-8 23:55
我觉得是不是两次键盘输入的类型问题?当录入数据依次是int String,并且分别使用nextInt()和next()方法获取 ...

上面那个nextInt()是选择功能1,2,3
出问题的是下面输入用户名和密码的时候,我两个都是用的nextLine(),但运行是第一次,“请输入用户名”“请输入密码”就是一起出来的。运行第二次就不会了
回复 使用道具 举报
第一次运行nextInt()时,假设输入1.
实际上缓冲区得到的是 1\n
nextInt读取时只把数字提取出来转换成int,但是\n还保存在缓冲区中
所以第二个sc.nextLine()读取到的是\n
你可以在第一次输入数字时,输入"1 李四"试验一下
name可以获得值,得到的是李四

第一句可以改成Integer i = Integer.parseInt(sc.nextLine());
回复 使用道具 举报
Nemo 中级黑马 2015-7-9 16:57:21
8#
是不是回车被默认为一次输入了
回复 使用道具 举报
乌卡卡 发表于 2015-7-9 14:35
上面那个nextInt()是选择功能1,2,3
出问题的是下面输入用户名和密码的时候,我两个都是用的nextLine() ...

那就没错了,如果先输入int后输入string出现的情况和你说的一样.我们昨天刚讲的.
原理楼下说得很清楚了. 你可以改成全部用String接收, String i = sc.nextLine();
然后把下面case里面的int型改为字符串型"1" , JDK1.7之后switch支持字符串类型
或者如楼下的所说,输入string,然后转型int,就不用改下面了
回复 使用道具 举报
牧师1990 发表于 2015-7-9 18:23
那就没错了,如果先输入int后输入string出现的情况和你说的一样.我们昨天刚讲的.
原理楼下说得很清楚了.  ...

好的,你在培训基础课程吗
回复 使用道具 举报
半月 发表于 2015-7-9 16:49
第一次运行nextInt()时,假设输入1.
实际上缓冲区得到的是 1\n
nextInt读取时只把数字提取出来转换成int,但 ...

好的,谢谢,就是你说的这样
回复 使用道具 举报
Nemo 发表于 2015-7-9 16:57
是不是回车被默认为一次输入了

是的,\n默认当成了sc.nextLine()输入结果
回复 使用道具 举报
乌卡卡 发表于 2015-7-10 15:01
好的,你在培训基础课程吗

对啊.你在哪个班?
回复 使用道具 举报
Integer i = sc.nextInt(); 类型转换之后出现的……
回复 使用道具 举报
半月 发表于 2015-7-9 16:49
第一次运行nextInt()时,假设输入1.
实际上缓冲区得到的是 1\n
nextInt读取时只把数字提取出来转换成int,但 ...

为什么循环运行第二次的时候,就不会出现呢
回复 使用道具 举报
牧师1990 发表于 2015-7-10 20:56
对啊.你在哪个班?

自学中,你就业班报的哪个
回复 使用道具 举报
代码太多了 看晕了啊
回复 使用道具 举报
嗯。有思想。
回复 使用道具 举报
...........
回复 使用道具 举报
妹子好 打算什么时候报就业班呢???
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马