import java.util.Scanner;
import java.util.concurrent.atomic.AtomicInteger;
public class Mathwork {
public static void main(String[] args) {
System.out.println("請進行您的運算:(以數位、運運算元之間以空格隔開)");
Scanner sc=new Scanner(System.in);//鍵入第一個引數
String s=sc.next();//將第一個引數賦予s
double s1=Double.valueOf(s);//進行字串轉化為double
Scanner ac=new Scanner(System.in);//鍵入第二個引數
String a=sc.next();//將引數輸入字串a
Scanner bc=new Scanner(System.in);//鍵入第三個引數
String b=sc.next();//將引數賦值字串b
double b1=Double.valueOf(b);//字串轉化為double
sc.close();//結束輸入
switch (a){
case "+":
System.out.println(add(s1,b1));//若第二個引數為+則返回s1+b1
break;
case "-":
System.out.println(sub(s1,b1));//若第二個引數為-則返回s1-b1
break;
case "*":
System.out.println(mul(s1,b1));
break;
case "/":
System.out.println(div(s1,b1));
break;
default:
System.out.println("您輸入的運運算元不合法!");
}
}
public static double add(double a,double b){
return a+b;
}
public static double sub(double a,double b){
return a-b;
}
public static double mul(double a,double b){
return a*b;
}
public static double div(double a,double b){
return a/b;
}
}
實現了一個兩個資料之間的運算,還必須在每次輸入後以空格或回車結尾,所以進行了改進。
import java.util.Scanner;
public class Mathwork2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
for (int i = 0; i < str.length(); i++) {
char chr=str.charAt(i);//迴圈提取字串中的字元
if('+'==chr){//判斷如果為+則進行
double a=Double.valueOf(str.substring(0,str.indexOf("+")));
//將字串中從頭到運運算元的字元變成double賦值給a
double b=Double.valueOf(str.substring(str.indexOf("+")+1,str.length()));
//將字串中從運運算元到結束的字串double並賦值給b
System.out.println(add(a,b));
} else if('-'==chr){
double a=Double.valueOf(str.substring(0,str.indexOf("-")));
// String b= str.substring(str.indexOf("-")+1,str.length());
// String b= str.substring(str.indexOf("-")+1),;
double b=Double.valueOf(str.substring(str.indexOf("-")+1,str.length()));
System.out.println(sub(a,b));
}else if ('*'==chr){
double a=Double.valueOf(str.substring(0,str.indexOf("*")));
// String b= str.substring(str.indexOf("*")+1,str.length());
// String b= str.substring(str.indexOf("*")+1),;
double b=Double.valueOf(str.substring(str.indexOf("*")+1,str.length()));
System.out.println(mul(a,b));
}else if ('/'==chr){
double a=Double.valueOf(str.substring(0,str.indexOf("/")));
// String b= str.substring(str.indexOf("/")+1,str.length());
// String b= str.substring(str.indexOf("/")+1),;
double b=Double.valueOf(str.substring(str.indexOf("/")+1,str.length()));
System.out.println(div(a,b));
}
}
}
public static double add(double a,double b){
return a+b;
}
public static double sub(double a,double b){
return a-b;
}
public static double mul(double a,double b){
return a*b;
}
public static double div(double a,double b){
return a/b;
}
}
實現了兩個資料之間的加減乘除運算,但是還是不能進行多個資料間的操作,所以進行了改進。
在3.0 中發現了一處bug無法改正,如果有大佬的話希望能提出些修改意見,下面是我的思路:
1.對鍵入的字串進行挨個字元的提取(str.charAt(i))。
2.對該字元是否為運運算元做判別,若為運運算元,則count+1,並且將該運運算元的位置賦值給陣列arr[]。
3.建立一個陣列int b[]=new b[count+1],陣列長度為運運算元個數加一。for (i=0;i<count ;count++),分別將第一個運運算元位置前的字元、第一個到第二個運運算元間的…一直到最後一個運運算元到整個字串長度的字串分別放入陣列b中;
4.從第一個運運算元一直往後迴圈運算(運算後將值先放入一個臨時變數中進行下一次的運運算元運算)
import java.util.Scanner;
public class Mathwork3 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
// String sc1=sc.nextLine();
String sc1="9*9*9*9*";
int count=0;
int place=0;
int[] arr= new int[100];
arr[0]=0;
for (int i = 0; i < sc1.length(); i++) {
char chr=sc1.charAt(i);
if(chr=='*'||chr=='+'||chr=='-'||chr=='/'){
if (count==0){
count=1;
}
arr[count]=sc1.indexOf(chr,arr[count-1]+1);
count++;
}else {
continue;
}
}System.out.println(count);
for (int i = 0; i < count; i++) {
System.out.println("第"+(i+1)+"個位置是"+arr[i]);
}
}
public static double add(double a,double b){
return a+b;
}
public static double sub(double a,double b){
return a-b;
}
public static double mul(double a,double b){
return a*b;
}
public static double div(double a,double b){
return a/b;
}
}
但進行到提取運運算元位置的時候,就不行了,一旦前一個運運算元與一個運運算元相同的話,就一直會輸出前一個運運算元的位置,因為indexof提取從一開始到當前第一個的位置,所以我將第一個運運算元位置加入indexof程式碼中,表示在第一個運運算元的後面出現的第一個運運算元的位置,記錄到陣列的下一個元素中,結果輸出時還是一直是第一個運運算元位置,為什麼啊,求大神指教。。。。。。
Thanks vary much…
import java.util.Scanner;
public class Mathwork3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String sc1 = sc.nextLine();
int count = 0;
int[] arr = new int[100];
arr[0] = 0;
int place1 = 0;
loop:
for (int i = 0; i < sc1.length(); i++) {
char chr = sc1.charAt(i);
if (chr == '1' || chr == '2' || chr == '3' || chr == '4' || chr == '5' || chr == '6' || chr == '7' || chr == '8' || chr == '9' || chr == '0' || chr == '+' || chr == '-' || chr == '*' || chr == '/') {
if (chr == '*' || chr == '+' || chr == '-' || chr == '/') {
arr[count] = sc1.indexOf(chr, place1 + 1);
place1 = arr[count];
count++;
}
} else {
System.out.println("輸入非法字元!");
break loop;
}
}
double[] brr = new double[count + 1];
double[] crr = new double[count];
brr[0] = Double.valueOf(sc1.substring(0, arr[0]));
for (int i = 1; i < count; i++) {
brr[i] = Double.valueOf(sc1.substring((arr[i])+1, arr[i+1])+1);
}
brr[count + 1] = Double.valueOf(sc1.substring((arr[count])+1 , sc1.length()+1));
if (count == 1) {
if (sc1.indexOf(arr[0])=='+'){
crr[0]=add(brr[0],brr[1]);
}
if (sc1.indexOf(arr[0])=='-'){
crr[0]=sub(brr[0],brr[1]);
}
if (sc1.indexOf(arr[0])=='*'){
crr[0]=mul(brr[0],brr[1]);
}
if (sc1.indexOf(arr[0])=='/'){
crr[0]=div(brr[0],brr[1]);
}
}else
for (int i = 1; i < count; i++) {
if (sc1.indexOf(arr[i])=='+'){
brr[i]=crr[i-1];
crr[i]=add(brr[i],brr[i+1]);
}
if (sc1.indexOf(arr[i])=='-'){
brr[i]=crr[i-1];
crr[i]=sub(brr[i],brr[i+1]);
}
if (sc1.indexOf(arr[i])=='*'){
brr[i]=crr[i-1];
crr[i]=mul(brr[i],brr[i+1]);
}
if (sc1.indexOf(arr[i])=='/'){
brr[i]=crr[i-1];
crr[i]=div(brr[i],brr[i+1]);
}
}
System.out.println(crr[count]);
}
public static double add(double a,double b){
return a+b;
}
public static double sub(double a,double b){
return a-b;
}
public static double mul(double a,double b){
return a*b;
}
public static double div(double a,double b){
return a/b;
}
}
new problem:
8*8*8
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 4, end 0, length 5
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3734)
at java.base/java.lang.String.substring(String.java:1903)
at Mathwork3.main(Mathwork3.java:30)
Process finished with exit code 1
記錄一下。。