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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

丿小余子

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 丿小余子 初级黑马   /  2014-4-2 18:18  /  2115 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

点评

发帖的时候有代码的请把代码放到代码块中,排好版,这样有助于别人阅读  发表于 2014-4-2 23:28

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

7 个回复

倒序浏览
你的代码有一行有问题:
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”

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
本帖最后由 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);
        }
}

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
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);
        }
}

评分

参与人数 1技术分 +1 收起 理由
itpower + 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);
        }
}

你两个代码都有问题。
Scanner sc=new Scanner(System.in);//声明一个Scanner类对象   
我用 cmd 编译了好几次,都是错误的

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
本帖最后由 MK_Chan 于 2014-4-3 09:55 编辑

回复5L。
  1. public static void main(String []args)
  2.      {
  3.              Scanner sc=new Scanner(System.in);//声明一个Scanner类对象
  4.              System.out.println("请输入你的年龄:");
  5.              int age=sc.nextInt();
  6.              System.out.println("你的年龄是:" + age);

  7.              System.out.println("请输入你的姓名:");
  8.              String name=sc.nextLine();
  9.              String name=sc.next();
  10.              System.out.println("你的名字是:" + name);
  11.             
  12.              System.out.println("请输入你的工资:");
  13.              float salary=sc.nextFloat();
  14.              System.out.println("你的工资是:" + salary);
  15.      }
复制代码



你的代码运行会出现Scanner sc=new Scanner(System.in);出错,是因为你没有引入调用Scanner类。
你在开始的时候,加入impore java.util.Scanner 即可。
主要还是这里的理解:
next()   查找并返回来自此扫描器的下一个完整标记。
nextLine()   此扫描器执行当前行,并返回跳过的输入信息。

回复 使用道具 举报
:lol
next(); 读取如果输入空格,会读取空格以前的部分..
nextLine();  会读取一整行,包括空格

关键你看看又有没导入util工具包..      

    看楼上很热情..     楼主解决了吧  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马