黑马程序员技术交流社区
标题:
Scanner类的疑问
[打印本页]
作者:
丿小余子
时间:
2014-4-2 18:18
标题:
Scanner类的疑问
第2种可以正常运行,第1种运行有问题 ,问题的原因是什么
1、public class Example
{
public static void main(String []args)
{
Scanner sc=new Scanner(System.in);//声明一个Scanner类对象
System.out.println("请输入你的年龄:");
int age=sc.nextInt();
System.out.println("你的年龄是:" + age);
System.out.println("请输入你的姓名:");
String name=sc.nextLine();
System.out.println("你的名字是:" + name);
System.out.println("请输入你的工资:");
float salary=sc.nextFloat();
System.out.println("你的工资是:" + salary);
}
}
2、public class Example
{
public static void main(String []args)
{
Scanner sc=new Scanner(System.in);//声明一个Scanner类对象
System.out.println("请输入你的姓名:");
String name=sc.nextLine();
System.out.println("你的名字是:" + name);
System.out.println("请输入你的年龄:");
int age=sc.nextInt();
System.out.println("你的年龄是:" + age);
System.out.println("请输入你的工资:");
float salary=sc.nextFloat();
System.out.println("你的工资是:" + salary);
}
}
作者:
Engle
时间:
2014-4-2 19:45
你的代码有一行有问题:
public static void main(String []args)
{
Scanner sc=new Scanner(System.in);//声明一个Scanner类对象
System.out.println("请输入你的年龄:");
int age=sc.nextInt();
System.out.println("你的年龄是:" + age);
System.out.println("请输入你的姓名:");
//
String name=sc.nextLine();
String name=sc.next();
System.out.println("你的名字是:" + name);
System.out.println("请输入你的工资:");
float salary=sc.nextFloat();
System.out.println("你的工资是:" + salary);
}
把nextLine方法换成next()方法即可。
next()
查找并返回来自此扫描器的下一个完整标记。
nextLine()
此扫描器执行当前行,并返回跳过的输入信息。
不行的原因为:
上面执行过“ int age=sc.nextInt(); ”
再执行“String name=sc.nextLine();”
此时sc中已经没有值了,如果用"System.out.println(sc.length());"输出s的长度,你会发现,s的长度为“0”
作者:
z1342802487
时间:
2014-4-2 21:09
本帖最后由 z1342802487 于 2014-4-2 21:11 编辑
nextInt() 接收一个整型字符并不读入"\n"字符,nextline()读入一行文本,会读入"\n"字符,但"\n"并不会成为返回的字符
串值的一部分。
结合你的代码
int age=sc.nextInt(); 比如输入一个20,但是 nextInt()不读入"\n"字符,所以"\n"字符就被nextLine读了,而nextLine读到"\n"字符就结束,而行分隔符前已经没信息,所以没有读到任何可返回的信息,这时候age=20 但name是空的。
下面的代码应该能说明这个问题
import java.util.Scanner;
public class Example
{
public static void main(String []args)
{
Scanner sc=new Scanner(System.in);//声明一个Scanner类对象
System.out.println("请输入你的年龄:");
int age=sc.nextInt();
System.out.println("你的年龄是:" + age);
System.out.println("25请输入你的姓名:");
String name= sc.nextLine();
boolean f =(name== null || name.length() <= 0);//判断name是否为空
System.out.println("name是否为空"+f);
String name2=sc.nextLine();
System.out.println("你的名字是:name2" + name2);
System.out.println("请输入你的工资:");
float salary=sc.nextFloat();
System.out.println("你的工资是:" + salary);
}
}
作者:
肖涵
时间:
2014-4-2 21:25
Scanner是SDK1.5新增的一个类,可是使用该类创建一个对象.
Scanner reader=new Scanner(System.in);
然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型: next.Byte(),nextDouble(),nextFloat,nextInt(),nextLin(),nextLong(),nextShot()
上述方法执行时都会造成堵塞,等待用户在命令行输入数据回车确认.例如,拥护在键盘输入12.34,hasNextFloat()的值是true,而hasNextInt()的值是false. NextLine()等待用户输入一个文本行并且回车,该方法得到一个String类型的数据。
将scanner包导入能解决问题
import java.util.Scanner;
public class Example
{
public static void main(String []args)
{
Scanner sc=new Scanner(System.in);//声明一个Scanner类对象
System.out.println("请输入你的年龄:");
int age=sc.nextInt();
System.out.println("你的年龄是:" + age);
System.out.println("请输入你的姓名:");
String name=sc.nextLine();
System.out.println("你的名字是:" + name);
System.out.println("请输入你的工资:");
float salary=sc.nextFloat();
System.out.println("你的工资是:" + salary);
}
}
作者:
黄泉
时间:
2014-4-2 22:08
1、public class Example
{
public static void main(String []args)
{
Scanner sc=new Scanner(System.in);//声明一个Scanner类对象
System.out.println("请输入你的年龄:");
int age=sc.nextInt();
System.out.println("你的年龄是:" + age);
System.out.println("请输入你的姓名:");
String name=sc.nextLine();
System.out.println("你的名字是:" + name);
System.out.println("请输入你的工资:");
float salary=sc.nextFloat();
System.out.println("你的工资是:" + salary);
}
}
2、public class Example
{
public static void main(String []args)
{
Scanner sc=new Scanner(System.in);//声明一个Scanner类对象
System.out.println("请输入你的姓名:");
String name=sc.nextLine();
System.out.println("你的名字是:" + name);
System.out.println("请输入你的年龄:");
int age=sc.nextInt();
System.out.println("你的年龄是:" + age);
System.out.println("请输入你的工资:");
float salary=sc.nextFloat();
System.out.println("你的工资是:" + salary);
}
}
你两个代码都有问题。
Scanner sc=new Scanner(System.in);//声明一个Scanner类对象
我用 cmd 编译了好几次,都是错误的
作者:
MK_Chan
时间:
2014-4-3 09:48
本帖最后由 MK_Chan 于 2014-4-3 09:55 编辑
回复5L。
public static void main(String []args)
{
Scanner sc=new Scanner(System.in);//声明一个Scanner类对象
System.out.println("请输入你的年龄:");
int age=sc.nextInt();
System.out.println("你的年龄是:" + age);
System.out.println("请输入你的姓名:");
String name=sc.nextLine();
String name=sc.next();
System.out.println("你的名字是:" + name);
System.out.println("请输入你的工资:");
float salary=sc.nextFloat();
System.out.println("你的工资是:" + salary);
}
复制代码
你的代码运行会出现
Scanner sc=new Scanner(System.in);
出错,是因为你没有引入调用Scanner类。
你在开始的时候,加入
impore java.util.Scanner
即可。
主要还是这里的理解:
next() 查找并返回来自此扫描器的下一个完整标记。
nextLine() 此扫描器执行当前行,并返回跳过的输入信息。
作者:
ノtrack
时间:
2014-4-3 10:16
:lol
next(); 读取如果输入空格,会读取空格以前的部分..
nextLine(); 会读取一整行,包括空格
关键你看看又有没导入util工具包..
看楼上很热情.. 楼主解决了吧
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2