这是一道考察字符串处理、输入、输出的题,先上题:
但是还是有几点需要注意的:
1.如何判断每行第一个字符串是数字还是字母
2.如果判断出来是数字,用什么方式将上面的符号“移”下来
由此,引出了几个Java小知识:
1.字符串转数字:用int的封装类型对象Integer种的parseInt()方法; ---代码段1
2.判断两字符串是否相等:用String中的方法equals() ---代码段2
代码段1:
String temp = "123";
int a = Integer.parseInt(temp);
代码段2:
if(!temp.equals("a") && !temp.equals("b") && !temp.equals("c")) {
//内容
}
在测试代码的过程中我遇到的一些问题:
因为输入输出繁琐,在复制标准输入的时候结尾未加回车,导致最后一行没有进入缓冲区;但是这一点在洛谷或者其他oj平台是不影响通过的(亲测,oj过程中机器会自动给末尾添加'\n');
关于题目本身的想法:
分成了两大类进行处理:
1.更换运算符的情况
2.延用上面的运算符情况
AC通过,下面是我的代码:
package p1957;
import java.util.*;
public class Main {
public static void main(String[] args) {
//读入n
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int flag=0;//用于标识当前运算符是哪个
int a,b;
//处理数据
for(int i=1;i<=n;i++) {//循环n-1次
//先判断是否要改变运算符
String temp = in.next();
if(!temp.equals("a") && !temp.equals("b") && !temp.equals("c")) {//如果不改变运算符
a = Integer.parseInt(temp);
b = in.nextInt();
if(flag == 1) {
int sum = a+b;
String s1= a+"+"+b+"="+sum;
System.out.println(s1);
System.out.println(s1.length());
}else if(flag == 2) {
int sum = a-b;
String s1= a+"-"+b+"="+sum;
System.out.println(s1);
System.out.println(s1.length());
}else if(flag == 3) {
int sum = a*b;
String s1= a+"*"+b+"="+sum;
System.out.println(s1);
System.out.println(s1.length());
}
}
else {
if(temp.equals("a")) {
a = in.nextInt();
b = in.nextInt();
int sum = a+b;
String s1= a+"+"+b+"="+sum;
System.out.println(s1);
System.out.println(s1.length());
flag = 1;
}else if(temp.equals("b")) {
a = in.nextInt();
b = in.nextInt();
int sum = a-b;
String s2= a+"-"+b+"="+sum;
System.out.println(s2);
System.out.println(s2.length());
flag = 2;
}else if(temp.equals("c")) {
a = in.nextInt();
b = in.nextInt();
int sum = a*b;
String s3= a+"*"+b+"="+sum;
System.out.println(s3);
System.out.println(s3.length());
flag = 3;
}
}
}
}
}