gpt4 book ai didi

java - 归并排序。错误--类型不匹配 : cannot convert from double to String

转载 作者:行者123 更新时间:2023-12-02 00:19:01 25 4
gpt4 key购买 nike

下面的程序使用合并排序来排列文件中的前 10,000 个单词。我遵循了 Thomas Cormen 在他的《算法导论》第二版中的伪代码。

import java.io.*;
import java.util.*;

public class SortingAnalysis {

public static void merge(String[] A, int p, int q, int r) {
int n1 = q-p+1;
int n2 = r-q;
double infinity = Double.POSITIVE_INFINITY;
int i, j;
String[] L = null;
String[] R = null;
for (i=1; i<=n1; i++) {
L[i] = A[(int) (p+i-1)];
}
for (j=1; j<=n2; j++) {
R[j] = A[(int) (q+j)];
}
L[n1+1] = infinity; //type mismatch: cant convert from double to string
R[n2+1] = infinity; //same as above
i=1;
j=1;
for (int k=(int) p; k<=r; k++) {
int comparison = L[i].compareTo(R[j]);
if (comparison<=0) {
A[k] = L[i];
i++;
}
else {
A[k] = R[j];
j++;
}
}

}

public static void mergeSort(String[] A, int p, int r) {
if (p<r) {
int q = (int) Math.floor((p+r)/2); //I typecasted q here so I can still pass the variables
mergeSort(A, p, q);
mergeSort(A, q+1, r);
merge(A, p, q, r);
}
}

public static void main(String[] args) {
final int NO_OF_WORDS = 10000;
try {
Scanner file = new Scanner(new File(args[0]));
String[] words = new String[NO_OF_WORDS];

int i = 0;
while(file.hasNext() && i < NO_OF_WORDS) {
words[i] = file.next();
i++;
}
long start = System.currentTimeMillis();
mergeSort(words, 0, words.length-1);
long end = System.currentTimeMillis();
System.out.println("Sorted Words: ");
for(int j = 0; j < words.length; j++) {
System.out.println(words[j]);
}
System.out.print("Running time of insertion sort: " + (end - start) + "ms");

}
catch(SecurityException securityException) {
System.err.println("Error");
System.exit(1);
}
catch(FileNotFoundException fileNotFoundException) {
System.err.println("Error");
System.exit(1);
}
}
}

控制台中显示错误
线程“main”java.lang.Error 中出现异常: Unresolved 编译问题:
类型不匹配:无法从 double 转换为 String
类型不匹配:无法从 double 转换为 String



at SortingAnalysis.merge ... mergeSort and main </code>


我认为这是因为Math.floor方法应该是一个double,但我将它类型转换为int,所以传递参数时不会有问题。

另外,我认为将字符串分配给无穷大时存在错误。但我只是遵循 Cormen 的伪代码。看起来是对的,因为我自己手动“调试”了代码。但是,当我将其放入代码中时,它不起作用。我哪里会出错?我需要你们的帮助,伙计们。我是 Java 新手,仍处于缓冲过程中。非常感谢!

最佳答案

I think it is because of the Math.floor method which is supposed to be a double but I did typecast it into int so there will be no problem when passing the parameters.

不,比这更简单。您正在尝试将 double 值分配给 string 数组。你根本不能这样做。

我强烈怀疑您应该更改整个代码以使用double[]而不是String[]。请注意,即使它正在编译(并且在真正修复所有编译错误之前,您不应该尝试运行它),您也会遇到以下问题:

String[] L = null;
String[] R = null;
for (i=1; i<=n1; i++) {
L[i] = A[(int) (p+i-1)];
}

这显然会抛出NullPointerException。您没有初始化数组变量来引用数组对象。你想要这样的东西:

double[] L = new double[n1 + 1];
double[] R = new double[n1 + 1];
for (i=1; i<=n1; i++) {
L[i] = A[(int) (p+i-1)];
}

以基于 1 的方式使用数组很奇怪,顺便说一句......这样做会更加更惯用:

double[] L = new double[n1];
double[] R = new double[n1];
for (i = 0; i < n1; i++) {
L[i] = A[p + i];
}

感觉你很挣扎,因为你想在这里学习两件事:

  • 合并排序的工作原理
  • Java 的工作原理

我会首先集中精力理解 Java 语言 - 那时您将能够更好地将伪代码转换为真实代码。

关于java - 归并排序。错误--类型不匹配 : cannot convert from double to String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11392608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com