gpt4 book ai didi

Java "compare cannot be resolved to a type"错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:02:48 25 4
gpt4 key购买 nike

尝试使用比较器对数组进行二分搜索时,出现奇怪的错误。该错误指出“compareArtist 无法解析为类型”,并由 Eclipse 在此代码上抛出:

Comparator<Song> compare = new Song.compareArtist();

我做了一些搜索,发现了 Eclipse 可能存在的错误,尽管我在另一台计算机上尝试过代码并且错误仍然存​​在。

我还发现了有关比较方法(在本例中为compareArtist)大小写的类似问题。我见过方法名称中的第一个单词大写的示例,尽管我的理解是方法名称传统上以小写字母开头。我尝试过更改大小写,但没有任何改变。

如果类没有导入正确的包,我还发现了对此错误的引用。我已在相关的两个类中导入了 java.util,据我所知,这允许使用比较器。

我已经尝试在具有二分搜索调用的类以及“Song”类中编写compareArtist方法,根据我的家庭作业,它应该在它应该在的位置。我已相应地更改了构造函数,但问题仍然存在。

最后,我尝试通过在 Song 类中实现 Comparator 并创建我自己的名为“compare”的方法来重写 Comparator 比较方法。这会返回相同的错误。在找到几个具有相同功能的示例后,我才开始调用与“compare”不同的比较器方法。

下面是调用使用比较器的二分搜索的类的相关代码。此代码还有一个本地版本的compareArtist 方法。虽然当前尚未调用该方法,但该方法的代码与我尝试从中调用它的 Song 类中的代码相同。

感谢您的建议和见解。

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

public class SearchByArtistPrefix {

private Song[] songs; // keep a direct reference to the song array
private Song[] searchResults; // holds the results of the search
private ArrayList<Song> searchList = new ArrayList<Song>(); // hold results of search while being populated. Converted to searchResults array.

public SearchByArtistPrefix(SongCollection sc) {
songs = sc.getAllSongs();
}

public int compareArtist (Song firstSong, Song secondSong) {
return firstSong.getArtist().compareTo(secondSong.getArtist());
}

public Song[] search(String artistPrefix) {

String artistInput = artistPrefix;
int searchLength = artistInput.length();

Song searchSong = new Song(artistInput, "", "");
Comparator<Song> compare = new Song.compareArtist();
int search = Arrays.binarySearch(songs, searchSong, compare);

歌曲类代码:

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

public class Song implements Comparable<Song> {

private String artist, title, lyrics;
private static int compareCounter = 0;

public Song(String artistName, String songTitle, String songLyrics) {
this.artist = artistName;
this.title = songTitle;
this.lyrics = songLyrics;
}
public String getArtist() {
return artist;
}

public void setArtist(String artist) {
this.artist = artist;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

public String getLyrics() {
return lyrics;
}

public void setLyrics(String lyrics) {
this.lyrics = lyrics;
}

public static int getCounter() {
return compareCounter;
}

public static void setCounter(int compareCounter) {
Song.compareCounter = compareCounter;
}

public int compareTo(Song secondSong) {

String secondArtist = secondSong.getArtist();
String secondTitle = secondSong.getTitle();

compareCounter++;

if (!this.artist.equals(secondArtist)) {
return this.artist.compareToIgnoreCase(secondArtist);
} else {
return this.title.compareToIgnoreCase(secondTitle);
}
}

public int compareArtist (Song firstSong, Song secondSong) {
return firstSong.getArtist().compareTo(secondSong.getArtist());
}

类末尾还有一个 main() 方法,但它仅提供内部测试代码,与当前问题无关。

最佳答案

在此代码中:

Comparator<Song> compare = new Song.compareArtist();

您正在从 Song.compareArtist 静态内部类实例化。此错误消息表明找不到此类。为此,您必须按以下方式更改您的 Song 类:

class Song{

public static class compareArtist<T> implements Comparator<T> {

@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
return 0;
}

}

}

关于Java "compare cannot be resolved to a type"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575833/

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