复杂环境下的数据统计问题
进行数值统计的时候,可能会混入一些非数值的元素,下面请编程完成对输入序列进行求和统计并输出, 如果遇到非数值元素,则自动跳过,并在最终结果输出行之后另起一行,输出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′|┛ 嗷!