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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 我叫MT 于 2014-3-2 21:04 编辑
  1. /*
  2. 让任何数作*9运算,然后让结果每个位数作为个数相加,直到结果为个位数为止
  3. 如31*9 = 279-->2+7+9 = 18-->1+8-->9

  4. 键盘录入并保证输入的是数字
  5. */
  6. import java.io.*;
  7. class Demo
  8. {
  9.         public static void main(String[] args)throws Exception
  10.         {
  11.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  12.                 String line = null;
  13.                 while((line=bufr.readLine())!=null);
  14.                 {
  15.                         String regex = "\\d+";
  16.                         if(line.matches(regex))
  17.                         {
  18.                                 int x = Integer.parseInt(line),z = 9,y;
  19.                                 y = x*z;
  20.                                 String str = String.valueOf(y);
  21.                                 int b = 0;
  22.                                 for(int i=0;i<str.length();i++)
  23.                                 {
  24.                                         String str2 = str.substring(i,i+1);
  25.                                         int a = Integer.parseInt(str2);
  26.                                         b = b+a;
  27.                                 }
  28.                                 String str3 = String.valueOf(b);
  29.                                 int c = 0;
  30.                                 for(int i2=0;i2<str3.length();i2++)
  31.                                 {
  32.                                         String str4 = str.substring(i2,i2+1);
  33.                                         int d = Integer.parseInt(str4);
  34.                                         c = c+d;
  35.                                 }
  36.                                 System.out.println("得到的结果是:"+c);
  37.                         }
  38.                         else
  39.                                 System.out.println("请输入正确的数字");
  40.                 }
  41.         }
  42. }
复制代码
第一个问题是这个代码启动后可以键盘录入却得不到结果怎么回事?没加入键盘录入时可以运算出结果的,第二个问题,这个代码有重复的地方,在23到35那里,如何优化?

15 个回复

正序浏览
额,,用递归要好多,这个问题上。。。
回复 使用道具 举报
q527198615 发表于 2014-3-2 20:55
能成功也就很好了,哥们是新学吧,递归学到了没?处理这个问题我建议你最好试着用递归解决。 ...

递归学过不过忘完了,正在复习中
回复 使用道具 举报
看你的技术分比我还高,我才打算进黑马学习,现在回答问题赚技术分呢,呵呵,有什么问题可以问我哈,有问必答
回复 使用道具 举报
能成功也就很好了,哥们是新学吧,递归学到了没?处理这个问题我建议你最好试着用递归解决。
回复 使用道具 举报
q527198615 发表于 2014-3-2 20:32
如果没修改好算法的话,我给你写一个参考

你看我改的这个怎么样,我已经发现这个改的成功了
  1. import java.io.*;
  2. class Demo
  3. {
  4.         public static void main(String[] args)throws Exception
  5.         {
  6.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  7.                 String line = null;
  8.                 while((line=bufr.readLine())!=null)
  9.                 {
  10.                         String regex = "\\d{1,10}";
  11.                         if(line.matches(regex))
  12.                         {
  13.                                 int x = Integer.parseInt(line),z = 9,y;
  14.                                 y = x*z;
  15.                                 String str = String.valueOf(y);
  16.                                 for(int i=0;i<5;i++)
  17.                                 {
  18.                                         int b = 0;
  19.                                         for(int i2=0;i2<str.length();i2++)
  20.                                         {
  21.                                                 String str2 = str.substring(i2,i2+1);
  22.                                                 int a = Integer.parseInt(str2);
  23.                                                 b = b+a;       
  24.                                         }
  25.                                         str = String.valueOf(b);
  26.                                 }
  27.                                 System.out.println("得到的结果是:"+Integer.parseInt(str));       
  28.                         }
  29.                         else
  30.                                 System.out.println("请输入正确合法的数字并保证数字不超过1亿");
  31.                 }
  32.         }
  33. }
复制代码
回复 使用道具 举报
如果没修改好算法的话,我给你写一个参考
回复 使用道具 举报
嗯,,你的算法写错了的哦
回复 使用道具 举报
q527198615 发表于 2014-3-2 19:51
前面的键盘录入用 Scanner in=new Scanner(System.in); String number = in.next();

用哪个方法键盘录入都可以关键是运算时结果跟事实不符
回复 使用道具 举报
q527198615 发表于 2014-3-2 19:58
你原先的猜想是什么?
  1. 999999
  2. 得到的结果是:17
  3. 31
  4. 得到的结果是:9
  5. 44
  6. 得到的结果是:12
  7. 345
  8. 得到的结果是:3
  9. 4555
  10. 得到的结果是:4
  11. 23
  12. 得到的结果是:2
  13. 31
  14. 得到的结果是:9
  15. 32
  16. 得到的结果是:10
  17. 33
  18. 得到的结果是:11
  19. 34
  20. 得到的结果是:3
  21. 765
  22. 得到的结果是:14
  23. 6
  24. 得到的结果是:5
复制代码

比如输入6,那么6*9=54--》5+4=9而结果却是5,只有输入31符合
回复 使用道具 举报
你原先的猜想是什么?
回复 使用道具 举报
前面的键盘录入用 Scanner in=new Scanner(System.in); String number = in.next();
回复 使用道具 举报
哎,问题更多了不符合我原来的猜想了
回复 使用道具 举报
第一个问题我解决了14行结尾多写了个分号,那该怎么优化呢?
回复 使用道具 举报
亲,你这个算法实在写的不好啊,而且得到键盘输入的值,你怎么不用Scanner呢?
回复 使用道具 举报
楼主,先把你这个代码拷过去给你想想,等待哟
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马