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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

yangxiong

  • 黑马币:23

  • 帖子:33

  • 精华:0

我今天刚好发了碰到了一个类似的例子,针对这个我发了一个相关的贴子,现在举个例子回复你把:
  1. import java.util.Scanner;
  2. public class Score {
  3.         public static void main(String[] args) {
  4.                 int[][] score = new int[3][3];
  5.                 int i, j, k = 0;
  6.                 String[] subject = { "语文", "数学", "英语" };
  7.                 String[] name = new String[3];
  8.                 Scanner scan = new Scanner(System.in);
  9.                 for (i = 0; i < 3; i++) {
  10.                         System.out.println("请输入第" + (i + 1) + "个宝宝的名字");
  11.                         name[i] = scan.nextLine();
  12.                         for (j = 0; j < 3; j++) {
  13.                                 System.out.println("请输入" + name[i] + "的" + subject[j] + "成绩");
  14. /*这里我们若用下面第一语句,nextInt()录入一个整数的时候,其实录入的是整数和\r\n,因为在录完整数后会敲击回车键,\r\n就代表的回车键,而nextLine遇到\r\n就会录入结束*/
  15. //score[i][j] = scan.nextInt();
  16. //我们用下面语句就解决了问题
  17.                                 score[i][j] = Integer.parseInt(scan.nextLine());
  18.                         }
  19.                 }
  20.                 System.out.println(name[0] + name[1] + name[2]);
  21.         }
  22. }
复制代码
希望对你有帮助,不懂可以给我留言


回复 使用道具 举报
楼主,您好!很高兴回答您的问题!
根据您提出的问题,给出以下回答:
楼主遇到的问题是,输入第一个数完毕之后,系统不等待我们输入第二个字符,直接跳过第二个输入步骤,结果输出,对吧?
解决办法其实很简单,楼主可以试一下,将nextLine()改成  next(),其他不变,试试。本人试过,成功的哦。
原代码如下:
import java.util.Scanner;

public class Test04 {

        public static void main(String[] args) {
                String ch;
                int input=0;
                System.out.println("请输入一个整型数:");
                Scanner sc=new Scanner(System.in);
                input=sc.nextInt();
                System.out.println("请输入一个字符:");
                ch=sc.next();
                System.out.printf("您输入的整数是%d\n",input);
                System.out.printf("您输入的字符是%s",ch);
        }

}
原理很简单:
当我们需要输入一个数的时候,输完数字之后我们按回车结束我们的输入。这时其实我们是输入了两个数据,一个是我们输入的数据,另一个是字符"\n"代表回车。
楼主有没有了解过缓存区的原理?现在我们首先要了解系统输入的一个原理,就是我们输入完毕之后,系统是不是直接将我们输入的数据直接赋值给变量呢?答案是,不是的。
这里要提出一个概念,叫做缓存区。当我们输入数据一个数据,再按一个回车,结束我们的输入的时候,缓存区其实接收到了两个数据,一个我们输入的数据,一个就是我们输入的回车。
系统会先检查缓存区有没有数据,如果没有,把我们输入的这两个存储到缓存区,再从缓存区拿出来,依次赋给需要赋值的变量,如果缓存区没有数据,则会等待我们的输入,如果已经存在数据,则会跳过我们的输入,将缓存区紧接着的数据赋值给我们的下一个变量。所以才会产生您所说的这种情况。
纯手打的,满意请采纳,谢谢!
回复 使用道具 举报
用户在录入的时候输入了一个整数就敲击了回车键。那么整数被nextInt接收了,整数后面是一个回车换行符,敲好nextLine的判断规则是遇到回车换行符就结束。因此当nextInt录入整数后用用nextLine录入字符串的时候只录入了整数,而字符串录入的是空串。解决方案是,全部用nextLine录入,然后对第一个录入的数据用Integer.parseInt()方法转换成整数。
回复 使用道具 举报
123
您需要登录后才可以回帖 登录 | 加入黑马