我正在尝试将一个char数组转换为一个double数组,每个double都在0-1之间,以便a
将是0
,而z
将是{{ 1}}。目前,我已经想到了这种方法,
1
但是public static double[] charToDouble(char[] chars){
double[] doubles=new double[chars.length];
double one=1;
double twentySix=26;
double eachChar=one/twentySix;
for(int i=0; i<chars.length; i++){
int charNum=((int)input)-96;
doubles[i]=eachChar*charNum;
}
return doubles;
}
将转换为a
而不是1/26
。
答案 0 :(得分:5)
您需要除以25
而不是26
,因为26个字母之间有25个间隔。
您过度考虑自己的方法;您只需要在一个简单的循环中一行代码:只需从每个字母的a
中减去char
,然后将结果除以25
:
for(int i = 0; i < chars.length; i++) {
doubles[i] = (chars[i] - 'a') / 25d;
}
请注意25之后的小“ d”-使25成为double
,这使结果成为double
。如果不这样做,则会得到整数算术运算,它将使除z
之外的每个字母都产生0
。