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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hycold 中级黑马   /  2016-5-13 02:51  /  1494 人查看  /  23 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.Scanner;
public class Score {

        public static void main(String[] args) {               
    int[][] score=new int[3][3];
    int i,j,k=0;
    String[] subject={"语文","数学","英语"};
    String[] name=new String[3];
    Scanner scan=new Scanner(System.in);
    for (i=0;i<3;i++){
            System.out.println("请输入第"+(i+1)+"个宝宝的名字");
            name[i]=scan.nextLine();           
               /* for(j=0;j<3;j++){
                    System.out.println("请输入"+name[i]+"的"+subject[j]+"成绩");
                score[i][j]=scan.nextInt();                                  
            }*/
           
    }
    System.out.println(name[0]+name[1]+name[2]);
        }

}
如上,把循环里面嵌套的循环注释掉的话,可以从控制器一一输入三个name
结果如下所示:
请输入第1个宝宝的名字
HA
请输入第2个宝宝的名字
HB
请输入第3个宝宝的名字
HC
HAHBHC
但是如果取消注释,运行嵌套循环,就出问题了:
请输入第1个宝宝的名字
HA
请输入HA的语文成绩
80
请输入HA的数学成绩
80
请输入HA的英语成绩
80
请输入第2个宝宝的名字
请输入的语文成绩

输入第一个name和对应的三个成绩的时候是正常的,但是到了第二个name就会被直接跳过。。
这是为什么?
help!

23 个回复

倒序浏览
话说半夜三更大家是歇了还是在敲键盘?
快来个人看看是咋回事吧
回复 使用道具 举报
快来个人看看是咋回事吧
回复 使用道具 举报
救。。。。
回复 使用道具 举报
一开始我还以为是宝宝的问题,现在看出来了;是scan.nextLine()和scan.nextInt()不能一起使用的问题
回复 使用道具 举报
把他们都改成scan.nextLine()就好了
回复 使用道具 举报
快来个人看看是咋回事! !!
回复 使用道具 举报
hycold 中级黑马 2016-5-13 15:05:22
8#
ypenghui 发表于 2016-5-13 13:21
把他们都改成scan.nextLine()就好了

不行啊,直接显示错误    类型不匹配:不能从String转为int score[j]=scan.nextLine();  
然后 scan.nextLine()和scan.nextInt()不能一起使用, 那第一次循环输入第一个宝宝的名字和分数为什么没问题呢。。。
回复 使用道具 举报
好吧,我直接上代码
  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.                                 score[i][j] = Integer.parseInt(scan.nextLine());
  15.                         }

  16.                 }
  17.                 System.out.println(name[0] + name[1] + name[2]);
  18.         }

  19. }
复制代码


回复 使用道具 举报
ypenghui 发表于 2016-5-13 16:05
好吧,我直接上代码

对的,就是这样,感谢前辈。
是我自己犯蠢,没会用Integer.parseInt把读取的string转成int
具体的bug原因应该是 scan.nextInt 会留一个空的字符串在控制器被scan.nextLine读取到吧
回复 使用道具 举报
nextlnt() 输出的 其实是 \r\n  所以你后面又有一个nextLine()的时候 那个\r\n就会被录入进去
回复 使用道具 举报
ypenghui 发表于 2016-5-13 16:05
好吧,我直接上代码

没加 try
回复 使用道具 举报
学到了,mark。。。
回复 使用道具 举报
inzaghi9247 来自手机 初级黑马 2016-5-13 23:19:49
14#
果然都是大神啊,膜拜来自: iPhone客户端
回复 使用道具 举报
itlf 中级黑马 2016-5-13 23:27:13
15#
没什么好说,我就是来看看
回复 使用道具 举报

额,代码确实还有好多错误,没对字符数据转int类型的数据做判断
回复 使用道具 举报
蒙蔽了。。。
回复 使用道具 举报

try是指这里加吗?貌似接收Scanner的数据也要做个判断
回复 使用道具 举报
学习了,好多大神
回复 使用道具 举报
ypenghui 发表于 2016-5-13 23:36
try是指这里加吗?貌似接收Scanner的数据也要做个判断

score[j] = Integer.parseInt(scan.nextLine());
她本来是string类型的!在转成int 时会有些问题!比如说不小心输入了字母,直接给你数字类型错误!所以要加try以防万一!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马