【发布时间】:2017-04-13 05:12:50
【问题描述】:
我正在尝试通过 java 实现具有 2D 数组的流行 Huffman 代码算法。
这个想法是创建这个二维数组,将输入的概率排序并插入数组的第一行,然后每行中的第一个元素将是前一行中前 2 个元素的总和。
然后在移动到下一行之前对当前行进行排序。
不幸的是,我在二维数组中的各个行的排序中看到了一个奇怪的输出。这是代码。
import java.util.Scanner;
public class SolaihtheHuffman {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("Please enter the number of letters.");
int numberofletters=input.nextInt();
float [][] grandoverseer=new float[numberofletters][numberofletters];
float [] probabilities = new float [numberofletters];
System.out.println("Please enter each letter's probability.");
for(int x=0;x<numberofletters;x++){
probabilities[x]=input.nextFloat();
}
float [] copiedprobabilities=new float[numberofletters];
System.arraycopy(probabilities, 0, copiedprobabilities, 0, numberofletters);
Sort(copiedprobabilities); //WORKS PROPERLY
for(int x=0;x<numberofletters;x++){
grandoverseer[x][0]=copiedprobabilities[x];
}
for(int x=0;x<numberofletters;x++){
System.out.println("Row "+grandoverseer[x][0]);
}
String [] lettercodes=new String[numberofletters];
for(int x=0;x<numberofletters;x++){
lettercodes[x]="";
}
for(int i=1;i<numberofletters;i++){
grandoverseer[0][i]=grandoverseer[0][i-1]+grandoverseer[1][i-1];
for(int j=1;j<numberofletters;j++){
if(j==4) break;
grandoverseer[j][i]=grandoverseer[j+1][i-1];
}
for(int k=0;k<numberofletters-i;k++){
copiedprobabilities[k]=grandoverseer[k][i];
}
Sort(copiedprobabilities);
for(int k=0;k<numberofletters-i;k++){
grandoverseer[k][i]=copiedprobabilities[k];
}
}
for(int x=0;x<numberofletters;x++){
for(int y=0;y<numberofletters;y++){
System.out.println("Row "+(x+1)+": "+grandoverseer[y][x]);
}
}
}
public static void Sort(float [] array){
int smallestposition;
for( int i=0; i<array.length;i++){
smallestposition=i;
for(int j=i+1; j<array.length ;j++){
if(array[j]<array[smallestposition]){
smallestposition=j;
}
}
if(smallestposition!=i){
float temp=array[i];
array[i]=array[smallestposition];
array[smallestposition]=temp;
}
}
}
}
我正在使用的示例是:从 A 到 E 的 5 个字母, A:0.3,B:0.1,C:0.2,D:0.15,E:0.25
如果代码按预期工作,我会看到 2D 数组的以下输出: 第 1 行:0.1、0.15、0.2、0.25、0.3 第 2 行:0.2、0.25、0.25、0.3、0.0 第 3 行:0.25、0.3、0.45、0.0、0.0 第 4 行:0.45、0.55、0.0、0.0、0.0 第 5 行:1.0、0.0、0.0、0.0、0.0
在此之后尝试打印数组会给我以下输出: 第 1 行:0.1 0.15 0.2 0.25 0.3 第 2 行:0.2 0.25 0.25 0.3 0.0 第 3 行:0.25 0.3 0.3 0.0 0.0 第 4 行:0.3 0.3 0.0 0.0 0.0 第 5 行:0.3 0.0 0.0 0.0 0.0
突出显示的数字不正确,由于某种原因,在正确排序第 2 行后,第 3 行中的最后一个数字不是 0.45 而是 0.3,并且 0.3 是重复的,而不是其余的数字。 有人想帮我解决这个问题吗?!
提前感谢您,如有任何困惑,我们深表歉意!
【问题讨论】:
标签: java multidimensional-array huffman-code