黑马程序员技术交流社区

标题: 编了一个需要输入数据的小程序,但是运行后结束不了了,求解答 [打印本页]

作者: 张洁    时间: 2012-6-5 11:44
标题: 编了一个需要输入数据的小程序,但是运行后结束不了了,求解答
程序是想输入一些数字,然后最终算出结果
但是运行后退不出循环了。。。一直需要输入数据。
谁知道这是怎么回事啊?~:'(

import java.io.*;

public class AddDemo {
        public static void main(String args[]) {
                int m = 0, s = 0, i = 0;
                String a = "", b = "";
                BufferedReader buf = new BufferedReader(
                                new InputStreamReader(System.in));
                while (a != null) {
                        System.out.println("输入一个整数,若输入完毕请输入回车");
                        System.out.print("现在请输入回车或数字:");
                        System.out.println();
                        try {
                                a = buf.readLine();
                                m = Integer.parseInt(a);
                                s += m;
                        } catch (Exception e) {
                                if (a == "")
                                        a = null;
                                System.out.println("请输入整数!!!");
                                System.out.print("重新");
                        }
                }
                System.out.println("它们的和为" + s);
        }

}

作者: 伊文龙    时间: 2012-6-5 12:02
                   s += m;
                        } catch (Exception e) {
                               if (a == "")                                        a = null;
                                System.out.println("请输入整数!!!");
                                System.out.print("重新");
                        }
                }
问题出在判断语句上

你改成if(a.trim().equals(""))就可以了

作者: 唐辉辉    时间: 2012-6-5 12:05
楼主您的代码有一些问题,请看String a="";这里是赋的值。判断应该用""来判断,而不是null, String a = null,是把这个引用指向null.  下面是修改好的代码。
import java.io.*;

public class Foo {
         public static void main(String args[]) {
                 int m = 0, s = 0, i = 0;
                 String a = "", b = "";
                 BufferedReader buf = new BufferedReader(
                                 new InputStreamReader(System.in));
                 while (a == "") {
                         System.out.println("输入一个整数,若输入完毕请输入回车");
                         System.out.print("现在请输入回车或数字:");
                         System.out.println();
                         try {
                                 a = buf.readLine();
                                 System.out.print(a);
                                 m = Integer.parseInt(a);
                                 System.out.print(m);
                                 s += m;
                                 System.out.print(s);
                         } catch (Exception e) {
                                 if (a == "")
                                         a = "";
                                 System.out.println("请输入整数!!!");
                                 System.out.print("重新");
                         }
                 }
                 System.out.println("它们的和为" + s);
         }

}

作者: 罗文杰    时间: 2012-6-5 12:19
楼上的代码一定会出现异常的, m = Integer.parseInt(a);这句 a是""的时候转换不了的。
死循环的原因的确是判断a != null的时候出的问题。
我理解的楼主的意思是要算两个数的和,我自己写了一小段代码但是没处理异常情况= =~~ 楼主看下
  1. public static void main(String[] args){
  2.            System.out.println("输入一个整数,若输入完毕请输入回车");
  3.            BufferedReader buf1 = new BufferedReader(
  4.                            new InputStreamReader(System.in));
  5.            String a = "", b = "";
  6.                    try {
  7.                            a = buf1.readLine();
  8.                    } catch (IOException e1) {
  9.                         // TODO Auto-generated catch block
  10.                            e1.printStackTrace();                          
  11.                    }
  12.            System.out.print("输入一个整数,若输入完毕请输入回车:");
  13.            BufferedReader buf2 = new BufferedReader(
  14.                    new InputStreamReader(System.in));
  15.            try {
  16.                    b = buf2.readLine();
  17.            } catch (IOException e1) {
  18.                         // TODO Auto-generated catch block
  19.                    e1.printStackTrace();       
  20.            }
  21.            int sum = Integer.parseInt(a) + Integer.parseInt(b);
  22.            System.out.println("它们的和为"+sum);
  23.         }
复制代码

作者: 罗文杰    时间: 2012-6-5 12:26
额,补充下,这里我觉得用Scanner的方法更好,因为有nextInt()方法,直接扫描输入置为int型,就省去转换的麻烦。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2