黑马程序员技术交流社区

标题: 求和没有达到预想结果、求解 [打印本页]

作者: 郑晓飞    时间: 2013-4-13 19:21
标题: 求和没有达到预想结果、求解
本帖最后由 郑晓飞 于 2013-4-13 20:10 编辑
  1. /*
  2.                 从键盘输入一个字符串,
  3.                 要求将字符串中的所有数字的和求出来.

  4. */
  5. import java.util.Scanner;
  6. class Demo2 {
  7.         public static void main(String[] args) {
  8.                 Scanner sc = new Scanner(System.in);
  9.                 System.out.println("请随机输入一串字符");
  10.                 String msg = sc.nextLine();//键盘输入数值
  11.                 char[] ch = msg.toCharArray();

  12. //要想得到字符串中的所有数字之和、首先将字符串中的数字提取出来
  13.                 for (int i =0;i<ch.length ;i++ ) {
  14.                         int sum = 0;

  15.                         //判断是否为数字
  16.                         if (ch[i]>='0' && ch[i]<='9') {
  17.                                 System.out.println(ch[i]);
  18.                                 /*
  19.                                 sum += ch[i];
  20.                                 System.out.println(sum);
  21.                                 */
  22.                         }        

  23.                 }
  24.         }
  25. }
复制代码

作者: 郑晓飞    时间: 2013-4-13 19:26
注释打开后、输出结果并不是int类型的和、求教哪里出了问题?
作者: 殇_心。    时间: 2013-4-13 19:28
哥们,以前学过c++?
代码如下:
import java.util.Scanner;

class Main {

        public static void main(String[] args) {

                Scanner sc = new Scanner(System.in);

                System.out.println("请随机输入一串字符");

                String msg = sc.nextLine();//键盘输入数值

                char[] ch = msg.toCharArray();


//要想得到字符串中的所有数字之和、首先将字符串中的数字提取出来
                int sum = 0;
                for (int i =0;i<ch.length ;i++ )
                {

                        //判断是否为数字

                        if (ch[i]>='0' && ch[i]<='9')
                        {

                               sum += (int)(ch[i]-'0');

                        }   
                }  
                System.out.println(sum);   

        }

}
作者: Asan    时间: 2013-4-13 19:37
你这个好像是用户只能输入一个数吧!
作者: 陈圳    时间: 2013-4-13 19:44
  1. String str="asdfk111kjjkldf2";
  2.                 str=str.replaceAll("\\D","");
  3.                 System.out.println(str);
  4.                 int sum=0;
  5.                 for(int i=0;i<str.length();i++)
  6.                         sum+=(str.charAt(i)-48);
  7.                 System.out.println(sum);
复制代码

作者: _王涛    时间: 2013-4-13 19:57
修改你的代码如下:
import java.util.Scanner;

class Demo2 {

        public static void main(String[] args) {


Scanner sc = new Scanner(System.in);

                                System.out.println("请随机输入一串字符");

                                String msg = sc.nextLine();//键盘输入数值

                              char[] ch = msg.toCharArray();

                //要想得到字符串中的所有数字之和、首先将字符串中的数字提取出来
                              int sum = 0;
                                for (int i =0;i<ch.length ;i++ ) {
                                      
                                //判断是否为数字
                                       if (ch>='0' && ch<='9') {
                               // int num=(int)ch-48;
                               String str=ch+"";
                               int in=Integer.valueOf(str);
                                        sum+=in;
                                       }      
                               }
                                System.out.println("和為:"+sum);
}
}
作者: 郑晓飞    时间: 2013-4-13 20:04
殇_心。 发表于 2013-4-13 19:28
哥们,以前学过c++?
代码如下:
import java.util.Scanner;

没有、以前不是干这个的,今年才开始学的

代码很清晰、看明白了,谢谢你耐心的回答
作者: 郑晓飞    时间: 2013-4-13 20:04
陈圳 发表于 2013-4-13 19:44

嗯、谢谢你的耐心回答、已经找到问题所在了
作者: 郑晓飞    时间: 2013-4-13 20:05
_王涛 发表于 2013-4-13 19:57
修改你的代码如下:
import java.util.Scanner;

谢谢你耐心的回答、找到问题的原因了
作者: 郑晓飞    时间: 2013-4-13 20:10
这里的sum初始值应放在循环外面、避免每次循环归零

  sum += (int)(ch[i]-'0')   char类型要进行int的转换、后面或加或减'o'或者'',使其对应ASCII表值

是自己太疏忽了、谢谢大家的回答
作者: 蓝色骨头    时间: 2013-4-14 00:28
本帖最后由 蓝色骨头 于 2013-4-14 00:29 编辑
  1.         public static void main(String[] args) throws IOException {
  2.                 // TODO Auto-generated method stub
  3.                 Scanner sc = new Scanner(System.in);
  4.         System.out.println("input a string like: 123 456 8");
  5.         String line = sc.nextLine();//读取一行
  6.         String[] strs = line.split(" ");//分割行
  7.         
  8.         //计算和
  9.         int sum = 0;
  10.         for(String str:strs){
  11.                 sum += new Integer(str);//使用Ingeter的构造方法,不用自己处理
  12.         }
  13.         
  14.         System.out.println("sum="+sum);
  15.         }
复制代码
input a string like: 123 456 8
111 222 333 444
sum=1110





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