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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 起猿 中级黑马   /  2013-11-7 00:59  /  1584 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 起猿 于 2013-11-7 23:29 编辑

写的程序出问题了
  1. import java.util.Scanner;

  2. /*
  3. * 需求;我有一个学生类,包含姓名和年龄属性,同时提供getXxx()/setXxx()方法。
  4. 请在测试类中,定义一个学生数组,并给这个数组中添加5个学生对象。
  5. 每个学生的姓名和年龄都从键盘录入。
  6. 最后,输出学生数组中的数据
  7. */
  8. public class StudentDemo {

  9. /**
  10. * @author GuoFeiLong
  11. * @param args
  12. */
  13. public static void main(String[] args) {
  14. // TODO Auto-generated method stub
  15. System.out.println("请输入你要录入学生资料的数量");
  16. /*
  17. * 请输入第1个学生的信息; 请输入第2个学生的信息; 请输入第num个学生的信息; 循环中赋值;
  18. */
  19. showStudentMessage();// 显示学生信息......
  20. }

  21. // 显示学生信息.......
  22. public static void showStudentMessage() {
  23. // TODO Auto-generated method stub
  24. Scanner scanner = new Scanner(System.in);
  25. int num = scanner.nextInt();
  26. Scanner sc = new Scanner(System.in);
  27. // 定义学生数组,接收资料
  28. Student[] stuArr = new Student[num];
  29. for (int i = 0; i < num; i++) {
  30. //先创建学生对象,给学生对象赋值后传入数组......
  31. Student student = new Student();
  32. System.out.println("请输入第" + (i + 1) + "个学生的资料!!!");
  33. // 输入学生姓名;
  34. System.out.println("请输入学生姓名:");
  35. String name = scanner.nextLine();
  36. student.setName(name);
  37. // 输入学生年龄
  38. System.out.println("请输入学生年龄:");
  39. int age = scanner.nextInt();
  40. student.setAge(age);
  41. //stuArr[i]=stuArr[i].getAge()+stuArr[i].getName();
  42. stuArr[i]=student;
  43. }

  44. scanner.close();
  45. sc.close();

  46. // 遍历已经赋值的学生数组打印出来;
  47. for (int i = 0; i < num; i++) {
  48. System.out.println(stuArr[i].getName() + "......."
  49. + stuArr[i].getAge());// 遍历学生信息..........
  50. //System.out.println(stuArr[i]);
  51. }
  52. }
  53. }

  54. // 学生类=========================
  55. class Student {
  56. private String name;
  57. private int age;

  58. public Student() {
  59. super();
  60. // TODO Auto-generated constructor stub
  61. }

  62. public Student(String name, int age) {
  63. super();
  64. this.name = name;
  65. this.age = age;
  66. }

  67. public String getName() {
  68. return name;
  69. }

  70. public void setName(String name) {
  71. this.name = name;
  72. }

  73. public int getAge() {
  74. return age;
  75. }

  76. public void setAge(int age) {
  77. this.age = age;
  78. }

  79. @Override
  80. public boolean equals(Object obj) {
  81. // TODO Auto-generated method stub
  82. // 提高健壮性
  83. boolean flag = false;
  84. if (!(obj instanceof Student)) {
  85. flag = false;
  86. }
  87. // 提高效率
  88. if (this == obj) {
  89. flag = true;
  90. }
  91. Student s = (Student) obj;
  92. if (this.name.equals(s.name) && this.age == s.age) {
  93. flag = true;
  94. }
  95. return flag;
  96. }

  97. @Override
  98. public String toString() {
  99. // TODO Auto-generated method stub
  100. return name + age;
  101. }

  102. }
复制代码
运行不等待,直接都出来了,可我还没输入呢

111.jpg (24.62 KB, 下载次数: 23)

111.jpg

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

5 个回复

正序浏览
起猿 发表于 2013-11-7 10:23
为什么那个对象不用就出现那种情况呢

把断点做在Scanner类里面,然后调试,你会发现如果原来有输入的话,不会进入readinput函数里面读取你的输入,所以,需要重新开一个




回复 使用道具 举报
起猿 发表于 2013-11-7 10:23
为什么那个对象不用就出现那种情况呢

不是因为不用sc对象的问题,而是scanner对象你已经用过了,在你这样的情况下不能重复用,如果用while(scanner.hasNextInt())就可以重复用,你自己先试一下修改吧,不懂再问,一起学习
  1. import java.util.*;
  2. class ScannerDemo
  3. {
  4.         public static void main (String []args)
  5.         {       
  6.                
  7.                         Scanner in = new Scanner(System.in);
  8.                 while(in.hasNextInt()        )
  9.                         {
  10.                
  11.                         int num = in.nextInt();
  12.                         System.out.println(num);
  13.                         }
  14.         }
  15.        
  16. }

复制代码
回复 使用道具 举报
miedongdong 发表于 2013-11-7 01:18
主要是你用错对象的问题
我在你的代码上修改了一下,我运行可以的

为什么那个对象不用就出现那种情况呢
回复 使用道具 举报
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html

回复 使用道具 举报
主要是你用错对象的问题
我在你的代码上修改了一下,我运行可以的
  1. <p>
  2. import java.util.Scanner;</p><p>
  3. public class StudentDemo {
  4. public static void main(String[] args) {
  5. // TODO Auto-generated method stub
  6. System.out.println("请输入你要录入学生资料的数量");

  7. showStudentMessage();// 显示学生信息......
  8. }</p><p>
  9. public static void showStudentMessage() {

  10. Scanner scanner = new Scanner(System.in);//这个扫描类的对象你已经用过一次了,倒是下面的扫描类对象sc你没用过
  11. int num = scanner.nextInt();
  12. Scanner sc = new Scanner(System.in); //这个你还没用

  13. Student[] stuArr = new Student[num];
  14. for (int i = 0; i < num; i++) {

  15. Student student = new Student();
  16. System.out.println("请输入第" + (i + 1) + "个学生的资料!!!");

  17. System.out.println("请输入学生姓名:");
  18. String name = scanner.nextLine();//此时用过一次后,就不再输入了
  19. student.setName(name);

  20. System.out.println("请输入学生年龄:");
  21. int age = scanner.nextInt();//这里应该修改成int age = sc.nextInt();
  22. student.setAge(age);

  23. stuArr[i]=student;
  24. }</p><p>scanner.close();
  25. sc.close();</p><p>
  26. for (int i = 0; i < num; i++) {
  27. System.out.println(stuArr[i].getName() + "......."
  28. + stuArr[i].getAge());// 遍历学生信息..........

  29. }
  30. }
  31. }</p><p>//下面代码没有修改</p>
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 辛苦了~

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马