华为od机试计算误码率(Java)-LMLPHP

华为od机试计算误码率(Java)-LMLPHP

 

import java.util.Scanner;

/**
* 计算误码率问题
* 输入和输出的码相对比出错的字数和总字数相除
* 例:输入为2A3B4D1Z 2A1C2B4D1Z 解压后为AABBBDDDDZ AACBBDDDDZ
* 解压前不一定相同,解压后字数相同
*/
public class CodeErrorRate {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

char[] pre = scanner.nextLine().toCharArray();//传输前字符串 存入char数组中
char[] aft = scanner.nextLine().toCharArray();//传输后字符串
// List<Integer> prezip = null;
// List<Integer> aftzip = null;
char[] prezip = new char[100000];//前解压 待存。。。
char[] aftzip = new char[100000];//后解压
int tag=0;
for (int i = 0; i < pre.length >>> 1; i++) {
//循环1/2 总字符次
//(int)pre[2*i] 不可以这样写,必须要先进行转码,‘1’ 和1是不同的。
char a = pre[2 * i];
String b = String.valueOf(a);
int c = Integer.parseInt(b);
for (int j = 0; j < c; j++) {//循环字母前数字值次
// prezip.add((int) pre[i+1]);
prezip[tag] = pre[2 * i + 1];//将拿到的字母存入待存数组中
tag += 1;
}
}
int tag1 = 0;
for (int i = 0; i < aft.length >>> 1; i++) {
//循环1/2 总字符次
char a = aft[2 * i];
String b = String.valueOf(a);
int c = Integer.parseInt(b);
for (int j = 0; j <c ; j++) {//循环字母前数字值次

// prezip.add((int) pre[i+1]);
aftzip[tag1] = aft[2 * i + 1];//将拿到的字母存入待存数组中
tag1 += 1;
}
}
//开始比对字符串

double count = 0.00;
// double rate = 0.00;
for (int i = 0; i < prezip.length; i++) {//比对总字符次
if (!(prezip[i] == '\0')&&prezip[i]==aftzip[i]){
count++;
}
}
double count1 = 0.00;
for (int i = 0; i < prezip.length; i++) {
if (!(prezip[i] == '\0')){
count1 += 1;
}
}
String rate = count+"/"+count1;

}

}

11-18 13:14