【PTA JAVA】7-4 编程题:复杂情况下的数据统计问题 (5 分) 基础解法

1 篇文章 0 订阅

复杂环境下的数据统计问题

进行数值统计的时候,可能会混入一些非数值的元素,下面请编程完成对输入序列进行求和统计并输出, 如果遇到非数值元素,则自动跳过,并在最终结果输出行之后另起一行,输出attention

输入格式:

单行输入,元素之间使用空格分开

输出格式:

对元素所对应的整数进行求和并输出

如果遇到非数值元素,则自动跳过,并在最终结果输出行之后另起一行,输出attention

输入样例a:

在这里给出一组输入。例如:

1 2 3 4 5

输出样例a:

在这里给出相应的输出。例如:

15

输入样例b:

在这里给出一组输入。例如:

1 2 3 4 a 5

输出样例b:

在这里给出相应的输出。例如:

15attention

读题:

题目很好懂,就是把一个一些元素中的数字取出来求和,如果元素中有除数字外其他元素输出attention,元素之间用空格隔。

思路:

不妨把所有元素连带空格看成一个字符串,遍历字符串的中的每一个元素,可能会遇到三种情况:1.空格、2.数值、3.非数值。分别对这三中情况做不同处理就可以了。

※注意:

Java和C++的字符串遍历不同这里采用 *.length()找长度和*.charAt()去下标的方式遍历

1.先说最简单的空格,如果空格左或右有空格那么这个空格实际上是输入的一个元素(严谨起见,实际上不判也可),如果没有就遍历字符串下一个元素。

2.再说非数值元素,如果出现其他的跳过,并做好标记,以便输出。但是非数值元素有两种出现的方式一种时是1个或多个非数值符号作为以一个非数值元素 ,eg: a ab ;另一种是和数值结合作为一个非数值元素,eg:4a 48b.

3.数值类元素,要把格局打开,这个数值有可能是多位的,所以需要利用空格来计算位数,也不能错过躲在众多数字中的非数值符号。

代码部分:

import java.util.*;
public class Main{
   public static void main(String[] args)
   {
       Scanner sc = new Scanner(System.in);
       String a = sc.nextLine();//注意字符串的输入函数;
       long sum = 0,flag = 0;//求和与标记
       for(int i = 0; i < a.length(); i++)//遍历字符串;
       {
           if(a.charAt(i)>= 48 && a.charAt(i) <= 57)//检测到数值;
           {
               int u = 1;//记录位数;
               for(int j = i+1; j < a.length(); j++)//判断位数;
               {
                    if(a.charAt(j)>= 48 && a.charAt(j) <= 57)//ASCII比较;
                      u = u*10 ;//位数加一;
                   else if(a.charAt(j) == ' ')  
                      break;//检测到空格结束; 
                  else
                   { 
                       flag = 1;//该元素是非数值元素,该标记;
                       break;//检测到非数值符号结束;
                   }
                }
               if(flag != 1)
                sum += (a.charAt(i)-48)*u;//按位累加;
           } 
          else if(a.charAt(i) == ' ' && a.charAt(i+1) != ' ' && a.charAt(i-1) != ' ')               ;//检测到空格遍历下一位;
           else//检测到非数值符号,该标签,下一位;
            flag = 1;
       }      //输出; 
      System.out.printf("%d",sum);
       if(flag == 1) 
      System.out.printf("attention");
   }
}

代码还是要自己写,不要抄作业┗|`O′|┛ 嗷!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值