相信许多刚开始接触java的人,在开始的时候写程序的时候都有思路上的不清晰,代码如何写,我也是才开始学没多久,觉得这个题对理解java基础知识和对API的用法上有帮助,希望你们能喜欢。
题目:简单的四则混合运算
从控制台输入,然后打印出结果
例如
思路:首先我们知道输入的是字符串,里面有乘除加减符号和数字,我们肯定要把里面的数字换成Double 类型的数字才能进行运算,然后还要按照运算法则先乘除后加减。
首先我们先把乘除的结果算出来
代码如下:
import java.util.Arrays;
import java.util.Scanner;
import org.junit.Test;
public class Oper1 {
@Test
public void testOperation(){
Scanner sc = new Scanner(System.in);
//为了方便测试,没有用Scanner,用的话应该String s = sc.next();就能从控制台输入内容
String s ="10-2*2/2+4+3*4/4+1";
//将加号替换成减号,不能用减号替换加号,因为正则表达式的原因,这里就不多赘述
String s1 =s.replace("+","-");
//分割字符然后放进数组
String[] str = s1.split("-");
//这里初始化加减结果
double total1=0;
//这里是查看切割后的结果,我们来看下结果:[10, 2*2/2, 4, 3*4/4, 1],截取出来就是这个样子。
System.out.println(Arrays.toString(str));
//然后我们来操作数组,把里面的乘除结果算出来,先遍历数组
for(String str1:str){
System.out.print(str1);
//判断是否含有乘或除
if(str1.contains("*")||str1.contains("/")){
//乘除结果
double total = 0;
//将有乘或除的字符串遍历
for(int i =0;i<str1.length();){
//截取字符串的变化长度
int count =1;
//遍历后面的每一个字符
a:for(int j =i+1;j<str1.length();j++){
//截取字符
char c =str1.charAt(j);
//判断是否是乘或除
if(c=='*'||c=='/'){
break a;
}else{
count++;
}
}
//将数字截取出来
String s2 =str1.substring(i,i+count);
//转为小数
double d = Double.parseDouble(s2);
if(i==0){
//将第一个数变为初始值
total = d;
}else{
char c1 = str1.charAt(i-1);
//判断数字前面的是乘或是除,然后分别乘除
if(c1=='*'){
total*=d;
}else if(c1=='/'){
total/=d;
}
}
//最后将计数器的累加条件改变
i+=count+1;
}
System.out.println(total);
//将结果替换到原来的字符串里
s= s.replace(str1, total+"");
System.out.println(s);
}
}
//进行加减运算
System.out.println(s);
for(int i =0;i<s.length();i++){
int count =1;
a:for(int j=i+1;j<s.length();j++){
char c = s.charAt(j);
if(c=='+'||c=='-'){
break a;
}else{
count++;
}
}
String s3= s.substring(i,i+count);
System.out.println(s3);
double d2 = Double.parseDouble(s3);
if(i==0){
total1 = d2;
}else{
char c = s.charAt(i-1);
if(c=='+'){
total1+=d2;
}else if(c=='-'){
total1-=d2;
}
}
i+=count;
}
System.out.println(total1);
}
}
下面没注释的是跟计算乘除一样,计算加减法