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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 屈俊材 于 2012-9-26 08:32 编辑
  1. import java.util.*;
  2. class Demo13
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Scanner sc = new Scanner(System.in);

  7.                 Person[] arr = new Person[3];

  8.                
  9.                 for(int i=0;i<arr.length;i++)
  10.                 {
  11.                         System.out.println("输入姓名:");
  12.                         String n = sc.nextLine();

  13.                         System.out.println("输入姓别:");
  14.                         String s = sc.nextLine();

  15.                         System.out.println("输入年龄:");
  16.                         int a = sc.nextInt();

  17.                         arr[i] = new Person();

  18.                         arr[i].name = n;
  19.                         arr[i].sex = s;
  20.                         arr[i].age = a;        
  21.                 }
  22.                 for(int i=0;i<arr.length;i++)
  23.                 {
  24.                         System.out.println(arr[i].name+arr[i].sex+arr[i].age);
  25.                 }
  26.         }
  27. }

  28. class Person
  29. {
  30.         String name;
  31.         String sex;
  32.         int age;
  33. }
复制代码
怎么会出现下面   现象


评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 淡定

查看全部评分

4 个回复

倒序浏览
  1. import java.util.*;
  2. class Demo13
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Scanner sc = new Scanner(System.in);

  7.                 Person[] arr = new Person[3];

  8.                
  9.                 for(int i=0;i<arr.length;i++)
  10.                 {
  11.                                        
  12.                                                 arr[i] = new Person();

  13.                         System.out.println("输入姓名:");
  14.                         arr[i].name = sc.next();

  15.                         System.out.println("输入姓别:");
  16.                         arr[i].sex = sc.next();

  17.                         System.out.println("输入年龄:");
  18.                         int a = sc.nextInt();
  19.                                                 arr[i].age = a;               
  20.                                     
  21.                 }
  22.                 for(int i=0;i<arr.length;i++)
  23.                 {
  24.                         System.out.println(arr[i].name+arr[i].sex+arr[i].age);
  25.                 }
  26.         }
  27. }

  28. class Person
  29. {
  30.         String name;
  31.         String sex;
  32.         int age;
  33. }
复制代码
哥们试一试这个方法,那个是你用的那个nextLine方法的问题,
来自 API:
            此扫描器执行当前行,并返回跳过的输入信息。 此方法返回当前行的其余部分,不包括结尾处的行分隔符。当前位置移至下一行的行首。   
        因为此方法会继续在输入信息中查找行分隔符,所以如果没有行分隔符,它可能会缓冲所有输入信息,并查找要跳过的行

评分

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

查看全部评分

回复 使用道具 举报
如果楼主用Scanner.nextLine()方法的话,可能会因为该方法就算没有输入信息
也会继续在输入信息中查找分隔行,如果没有,就会缓冲所有输出信息,并且要跳过输入行
所以,如果是想接受一个字符串,建议楼主直接用
Scanner.next();方法,该方法就不会出现楼主所说的情况
当然,还可以用IO流中接收数据的方法
BufferReader bufr=new BufferReader(new InputStreamReader(System.in))

该方法同Scanner一样,都可以接收键盘输入的信息。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 很给力!

查看全部评分

回复 使用道具 举报
  1. import java.util.*;
  2. class Demo13
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 //Scanner sc = new Scanner(System.in);

  7.                 Person[] arr = new Person[3];

  8.                
  9.                 for(int i=0;i<arr.length;i++)
  10.                 {
  11.                                         Scanner sc = new Scanner(System.in);//放在循环语句中
  12.                        
  13.                                            System.out.println("输入姓名:");
  14.                         String n = sc.nextLine();

  15.                         System.out.println("输入姓别:");
  16.                         String s = sc.nextLine();

  17.                         System.out.println("输入年龄:");
  18.                         int a = sc.nextInt();

  19.                         arr[i] = new Person();

  20.                         arr[i].name = n;
  21.                         arr[i].sex = s;
  22.                         arr[i].age = a;        
  23.                 }
  24.                 for(int i=0;i<arr.length;i++)
  25.                 {
  26.                         System.out.println(arr[i].name+" "+arr[i].sex+" "+arr[i].age);
  27.                 }
  28.         }
  29. }

  30. class Person
  31. {
  32.         String name;
  33.         String sex;
  34.         int age;
  35. }
复制代码
这样就可以了

QQ截图20120925225523.jpg (14.95 KB, 下载次数: 111)

QQ截图20120925225523.jpg

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1 哥们,你的端午,真的燃烧了。.

查看全部评分

回复 使用道具 举报
这是因为你在输入第一个人的最后一个信息,输入了一个整型和一个字符回车,所以下一个人的第一个信息被赋回车,可以把int a = sc.nextInt();改成int a =Integer.parseInt(sc.nextLine());
本人自己经修正的代码:
package liu.test.eclipse;

import java.util.*;

class Demo13
{

        public static void main(String[] args)
        {

                Scanner sc = new Scanner(System.in);


                Person[] arr = new Person[3];


               
                for(int i=0;i<arr.length;i++)

                {

                        System.out.println("输入姓名:");

                        String n = sc.nextLine();


                        System.out.println("输入姓别:");

                        String s = sc.nextLine();


                        System.out.println("输入年龄:");

                        int a =Integer.parseInt(sc.nextLine());


                        arr[i] = new Person();


                        arr[i].name = n;

                        arr[i].sex = s;

                        arr[i].age = a;        
                }

                for(int i=0;i<arr.length;i++)

                {

                        System.out.println(arr[i].name+arr[i].sex+arr[i].age);

                }

        }

}


class Person

{

        String name;

        String sex;

        int age;

}
运行结果:
输入姓名:
zhansan
输入姓别:
nan
输入年龄:
12
输入姓名:
wanger
输入姓别:
nv
输入年龄:
22
输入姓名:
liubin
输入姓别:
nan'
输入年龄:
14
zhansannan12
wangernv22
liubinnan'14
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马