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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马明杨 中级黑马   /  2013-11-16 10:29  /  1947 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

刚才做论坛的题目,出问题了,大家忙烦看一下:
public static void main(String[] args) {
                // 输入成绩用到了Scanner,创建对象
                Scanner sc = null;
                String str = null;
                do {
                        sc = new Scanner(System.in);
                        System.out.println("请输入一个学生成绩:");
                        int score = sc.nextInt();
                        panduan(score);//調用判斷的函數
                        System.out.println("输入over结束");
                        // 除去nextInt()录入的回车换行
                        sc.nextLine();
                        // 接收录入
                        str = sc.nextLine();
                        // 测试用现实输入的内容
                        System.out.println(str);
                } while (str != "over");

        }

所调用函数的内容就不贴了,运行程序后,正确输入一个数字,然后输入“over”,程序不能停止,下面是控制台输出的:
请输入一个学生成绩:
89

输入over结束
over
over
请输入一个学生成绩:



到底是哪里出了问题

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 常来云七活跃哈~~~

查看全部评分

13 个回复

倒序浏览
Sting类型的数据进行内容比较时要用str.equals(str2)。!=和==判断的都是内存地址
回复 使用道具 举报
赵晓海 发表于 2013-11-16 10:46
Sting类型的数据进行内容比较时要用str.equals(str2)。!=和==判断的都是内存地址 ...

谢谢提醒,但是换做了equals()还是不行
回复 使用道具 举报
字符串是对象,字符串中重写了equals方法,对象比较要用equals, == 和 != 比较的是内存地址值。2个不同的字符串的内存地址永远是不可能相等的。
回复 使用道具 举报
本帖最后由 赵晓海 于 2013-11-16 11:19 编辑
马明杨 发表于 2013-11-16 10:53
谢谢提醒,但是换做了equals()还是不行

sc.nextLine();
// 接收录入
str = sc.nextLine();

这两句换成str=sc.next();

还有一个要改的地方
int score=sc.next();
panduan(Integer.parseInt(score));


回复 使用道具 举报
  1. public class Score {
  2.         public static void main(String[] args) throws IOException {
  3.                 System.out.println("请输入成绩,结束请输入" + "\"over\"!");
  4.                 Scanner scan = new Scanner(System.in); // 实例化Scanner对象
  5.                 String score = scan.next(); // 将用户输入的数据保存到score中。
  6.                 while (!"over".equals(score)) { // 循环判断用户输入的数据,若为"over",则停止循环。
  7.                         try {
  8.                                 checkScore(Integer.parseInt(score));// 若不为"over",则进入checkScore方法判断数据。
  9.                         } catch (Exception e) {// 若输入的数据不是整数,则重新输入。Interger.parseInt(String s)在转换s时如果s不是整数,则会报错。
  10.                                 System.out.println("成绩输入有误,输入的成绩必须是整数,请重新输入!");
  11.                         }
  12.                         score = scan.next();//继续输入下一个成绩
  13.                 }
  14.                 scan.close();
  15.                 System.out.println("成绩输入结束!");
  16.         }

  17.         public static void checkScore(int score) {
  18.                 String str = "";
  19.                 if (score > 100 || score < 0) {        //首先判断输入的数据是否在给定范围以内,若超出范围,则直接跳出方法体。
  20.                         System.out.println("成绩输入有误,成绩的范围应该在0~100之间,请重新输入!");
  21.                         return;
  22.                 }
  23.                 //判断成绩。
  24.                 if (score >= 90 && score <= 100) {       
  25.                         str = ":优";
  26.                 } else if (score >= 80 && score <= 89) {
  27.                         str = ":良";
  28.                 } else if (score >= 70 && score <= 79) {
  29.                         str = ":中";
  30.                 } else if (score >= 60 && score <= 69) {
  31.                         str = ":及格";
  32.                 } else if (score >= 0 && score <= 60) {
  33.                         str = ":不及格";
  34.                 }
  35.                 System.out.println(score + str);//输出结果。
  36.         }
  37. }
复制代码
这是我的,仅供参考!

评分

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

查看全部评分

回复 使用道具 举报
lichao 中级黑马 2013-11-16 11:33:19
7#
只需要将while (str != "over");改为while(!str.equals(“over”));就可以了;==、!=号是判断地址的,String类中定义了equals来判断字符串内容是否相同
回复 使用道具 举报
张鹏 中级黑马 2013-11-16 11:41:50
8#
本帖最后由 张鹏 于 2013-11-16 11:43 编辑
  1. public class Test
  2. {
  3.     public static void main(String[] args)
  4.     {
  5.         // 输入成绩用到了Scanner,创建对象
  6.         Scanner = new Scanner(System.in);
  7.         String str = null;
  8.         do {
  9.                 //sc = new Scanner(System.in);放到上面,一个Scanner就行
  10.                 System.out.println("请输入一个学生成绩:");
  11.                 String str = sc.next();//int score = sc.nextInt(); int类型是解析不出退出指令
  12.                 panduan(str);//調用判斷的函數
  13.                
  14.                
  15.                 // 测试用现实输入的内容
  16.                 System.out.println(str);
  17.         } while (!"over".equals(str);// "over"调用equals()可以防止空指针异常
  18.     }
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 常来云七活跃哈~~~

查看全部评分

回复 使用道具 举报
赵晓海 发表于 2013-11-16 11:23
这是我的,仅供参考!

印象中Scanner是不需要close()的,你再看一下啊
回复 使用道具 举报
马明杨 发表于 2013-11-16 12:01
印象中Scanner是不需要close()的,你再看一下啊

Scanner属于IO流,凡是输入IO流的类,如果不关闭会一直占用系统资源。在这个小程序里运行完,Scanner就自动被关闭了,不关闭也不碍事。但是这是个习惯,用完了就关闭。而且用eclipse等IDE编辑的话,如果不关闭,他会提示你的!
回复 使用道具 举报
赵晓海 发表于 2013-11-16 12:18
Scanner属于IO流,凡是输入IO流的类,如果不关闭会一直占用系统资源。在这个小程序里运行完,Scanner就自 ...

个人理解,请看一下,请指正http://bbs.itheima.com/thread-99850-1-1.html
回复 使用道具 举报
  1. package cn.itcase;
  2. import java.util.Scanner;
  3. public class Demo4 {
  4. public static void main(String[] args) {

  5. while (true) {


  6. Scanner s1 = new Scanner(System.in);


  7. System.out.println("请输入成绩(0-100):");

  8. String s = s1.next();// 这里接收到一个用户输入的数据。



  9. if (s.equals("over")) {


  10. System.out.println("感谢您的使用");// 如果条件成立直接用break跳出while循环,下面就不会执行了

  11. break;

  12. }



  13. ChengJi(s);// 传入方法内去判断

  14. }

  15. }



  16. // 写方法

  17. public static void ChengJi(String s) {


  18. // 判断

  19. try {// 在这里写异常处理。可能转换类型的时候会出错。出错就表示用户输入的不是数字

  20. // 把输入的数据转为整数类型,不怕出错。出错有catch捕捉

  21. int number = Integer.parseInt(s);

  22. // 判断数字是否在要求的范围内

  23. if ((number > 0) && (number <= 100)) {

  24. // 是,则传入数据,并输入结果

  25. if (number >= 90 && number <= 100)// 如果if后面只有一个语句。可以不用写"{}"

  26. System.out.println("优");

  27. else if (number >= 80 && number <= 89)

  28. System.out.println("良");



  29. else if (number >= 70 && number <= 79)

  30. System.out.println("中");

  31. else if (number >= 60 && number <= 69)

  32. System.out.println("及格");



  33. else if (number >= 0 && number < 60)

  34. System.out.println("不及格");



  35. else if (number > 100 || number < 0)

  36. System.out.println("你输入的成绩有误,请重新输入");

  37. } else {

  38. // 否,则跳出提示。

  39. System.out.println("请输入0至100的数");

  40. }



  41. }

  42. // 因为这里有try所以,只要用户输入的不是数字。会跳出提示。

  43. catch (Exception e) {

  44. System.out.println("输入错误!请重新输入。(请勿输入非整形数字以外的字符)");

  45. }



  46. }

  47. }


复制代码
好吧。这道题我也做错了。这道题主要考的是加异常。我做的让人修改了下,发给你参考下。
回复 使用道具 举报
简★零度 发表于 2013-11-16 14:58
好吧。这道题我也做错了。这道题主要考的是加异常。我做的让人修改了下,发给你参考下。 ...

谢谢啦,收益了
回复 使用道具 举报
光看就够复杂的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马