19-12-03(化学方程式)

第一次

不知道错哪里了,怎么改都不对

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class csp3 {
    
    
   //  3Ba(OH)2+2H3PO4=6H2O+Ba3(PO4)2
    public static void main(String[] args){
    
    
        Scanner input = new Scanner(System.in);
        int number = Integer.parseInt(input.nextLine());
        String[] str= new String[number];
        for(int k = 0;k<number;k++){
    
    
            str[k] = input.nextLine();
        }
        for(int k = 0;k<number;k++) {
    
    
            System.out.println(str[k]);
        }
        for(int p =0;p<str.length;p++) {
    
    
            // String S = "3Ba(OH)2+2H3PO4=6H2O+Ba3(PO4)2";
            String S = str[p];
            String[] temp = S.split("=");
            String[] left = temp[0].split("\\+");
            String[] right = temp[1].split("\\+");
            int l_length = left.length;
            int r_length = right.length;
            int result = 0;
            Map<Character, Integer> left_map = new HashMap<>();
            Map<Character, Integer> right_map = new HashMap<>();
            //分离完成  计算左右两边元素个数
            //left中放入等号左侧全部的元素
            //left_map
            for (int i = 0; i < l_length; i++) {
    
    
                Map<Character, Integer> left_temp = new HashMap<>();
                count(left[i], left_temp);
                for (Map.Entry<Character, Integer> t : left_temp.entrySet()) {
    
    
                    char c = t.getKey();
                    if (left_map.containsKey(c)) {
    
    
                        left_map.put(c, left_map.get(c) + (left_temp.get(c)));//相乘 相加
                    } else {
    
    
                        left_map.put(c, (left_temp.get(c)));
                    }
                }
            }
            //right_map
            for (int i = 0; i < r_length; i++) {
    
    
                Map<Character, Integer> right_temp = new HashMap<>();
                count(left[i], right_temp);
                for (Map.Entry<Character, Integer> t : right_temp.entrySet()) {
    
    
                    char c = t.getKey();
                    if (right_map.containsKey(c)) {
    
    
                        right_map.put(c, right_temp.get(c) + (right_temp.get(c)));//相乘 相加
                    } else {
    
    
                        right_map.put(c, (right_temp.get(c)));
                    }
                }
            }
            //比较
//            for (Map.Entry<Character, Integer> t : right_map.entrySet()) {
    
    
//                char c = t.getKey();
//                System.out.println(right_map);
//                System.out.println(left_map.containsKey(c));
//                if ((!left_map.containsKey(c)) || (right_map.get(c) != left_map.get(c))) {
    
    
//                    result = 1;
//                    break;
//                }
//            }
            //输出结果
            //比较两个map是否相等
            if(left_map.equals(right_map)){
    
    
           // if (result == 1) {
    
    
                System.out.println("Y");
            } else {
    
    
                System.out.println("N");
            }
        }//退出循环
    }
// s = 3Ba(OH)2   || s = 2H3PO4
    public  static void count( String s,Map<Character,Integer> Map ){
    
    
                        int length = s.length();
                        char[] ch = s.toCharArray();
                        int start = 1;
                        String start_s ="";
                        int flag =1;
                        //开始遍历 3Ba(OH)2  2H3PO4  H2O
                        for(int j =0;j<length;j++){
    
    
                            int end = 1;
                            int number = 1;
                            String end_s="";
                            String number_s="";
                            //分离系数
                            if(flag == 1) {
    
    //系数
                                while ((ch[j] + 0) >= 47 && (ch[j] + 0) <= 58) {
    
    
                                    //String 和 char 相加转化为 String
                                    start_s += String.valueOf(ch[j]);
                                    j++;
                                }
                                if (start_s.length() > 0)
                                    start = Integer.parseInt(start_s);
                                flag = 0;
                            }
                            //放入数据
                            //Map.put(ch[j],(Map.getOrDefault(ch,0)+1));
                            if(ch[j] != '(' &&(((ch[j] + 0) >= 97 && (ch[j] + 0) <= 122)||((ch[j] + 0) >= 65 && (ch[j] + 0) <= 90))){
    
    
                                Map.put(ch[j], start);
                            }
                            //进入括号
                            if(ch[j] == '(' ){
    
    
                                j++;
                                Map<Character,Integer> temp_map = new HashMap<>();
                                while (ch[j] != ')') {
    
    
                                    temp_map.put(ch[j],1);
                                    j++;
                                }
                                //退出括号
                                //统计括号后的系数
                                j++;//跳过后括号
                                while (j<length && (ch[j] + 0) >= 47 && (ch[j] + 0) <= 58) {
    
    
                                    //String 和 char 相加转化为 String
                                    end_s += String.valueOf(ch[j]);
                                    j++;
                                }
                                if (end_s.length() > 0)
                                    end = Integer.parseInt(end_s);
                                //合并两个map
                                for(Map.Entry<Character,Integer> temp: temp_map.entrySet()){
    
    
                                    char c = temp.getKey();
                                    if(Map.containsKey(c)){
    
    
                                    //    System.out.print(Map.get(c)+(temp_map.get(c)*end)*start);
                                        Map.put(c,Map.get(c)+(temp_map.get(c)*end)*start);//相乘 相加
                                        temp_map.remove(c);
                                    }else{
    
    
                                        temp_map.put(c,(temp_map.get(c)*end)*start);//相乘 相加
                                    }
                                }
                              //  System.out.println(Map);
                              //  System.out.println(temp_map);
                                Map.putAll(temp_map);//与括号中的合并
                            } //退出括号
                            //遇到数字
                            //这个的while变为了if
                            if (j<length && (ch[j] + 0) >= 48 && (ch[j] + 0) <= 57 ) {
    
    
                                number_s += String.valueOf(ch[j]);
                                j++;
                            }
                            if (number_s.length() > 0) {
    
    
                                number = Integer.parseInt(number_s);
                                Map.put(ch[j-2],number*start);
                                j--;
                            }
                        }
    //退出函数
    }

}

おすすめ

転載: blog.csdn.net/qq_51985653/article/details/120774259
おすすめ