为 Letter 计数器编写构造函数
Writing a constructor for a Letter counter
我需要为客户端代码编写此构造函数,该代码将读取文本文件并计算字母表中每个字母的实例数。当构造函数在客户端代码中为运行时,它会输出字母,然后输出它在文件中出现的实例数,例如:"a" occurred 65 times
。我在覆盖 toString 方法时遇到了麻烦,因为我每次尝试时都会收到 ';' expected
作为编译器错误,并且我已经尝试了在网上找到的几种方法。另外,我不知道我在用 toCompare
方法做什么。我环顾了互联网,没有什么是正确的。以下是作业的确切说明以及我目前所掌握的内容。一如既往,我们将不胜感激。
create a class LetterCount that:
1) stores a single character (a letter) and a count (an integer) in
private variables
2) implements the Comparable interface, thus there must be a
compareTo() method which should compare two LetterCount objects by
their count values
3) overrides toString() with a printable representation that shows the
letter and the count
public class LetterCount implements Comparable<LetterCount> {
private String letter;
private int count;
public LetterCount(String l, int x) {
letter = l;
count = x;
}
public String toString() {
return "Letter" + letter + " occurs "+ count " + times";
}
public int compareTo(LetterCount other) {
}
}
return "Letter" + l + " occurs "+ x + " times";
您缺少 +
至于 compareTo,这通常 用于对 LetterCount 对象进行排序。所以在你的情况下比较计数值。
在 toString 中,您将返回 'l' 和 'x',它们是构造函数的局部变量。你应该使用字母和计数
而且您还在字符串“times”中包含了 +。
对于 compareTo 你需要为 count
添加一个 getter
public int getCount() {
return count;
}
@Override
public int compareTo(LetterCount o) {
if(count > o.getCount()){
return 1;
}else if(count == o.getCount()){
return 0;
}else{
return -1;
}
}
return "Letter" + letter + " occurs " + count + " times";
缺少一个+,变量名错误。
public int compareTo(LetterCount other) {
if ( count < other.count )
return -1;
else if (count == other.count)
return 0;
else
return 1;
}
您一直在尝试打印出 l
和 x
,它们是在构造函数中传递给您的参数。当您尝试在 toString
中使用它们时,它们在 范围 中不存在——也就是说,Java 看不到它们。您应该使用在构造函数中分配给的实例变量(letter
和 count
)。这些对你的 class 的所有方法一直可用,不像 l
和 x
是 local,并且只存在于构造函数中.
另外,你说你想比较 LetterCount
个实例的数量。 Integer.compare
函数将为您完成。请参阅文档 http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#compare(int,%20int)
public class LetterCount implements Comparable<LetterCount>
{
private String letter;
private int count;
public LetterCount(String l, int x)
{
letter = l;
count = x;
}
public String toString()
{
return "Letter" + letter + " occurs "+ count +" times";
}
public int compareTo(LetterCount other)
{
return Integer.compare(this.count, other.count);
}
}
我需要为客户端代码编写此构造函数,该代码将读取文本文件并计算字母表中每个字母的实例数。当构造函数在客户端代码中为运行时,它会输出字母,然后输出它在文件中出现的实例数,例如:"a" occurred 65 times
。我在覆盖 toString 方法时遇到了麻烦,因为我每次尝试时都会收到 ';' expected
作为编译器错误,并且我已经尝试了在网上找到的几种方法。另外,我不知道我在用 toCompare
方法做什么。我环顾了互联网,没有什么是正确的。以下是作业的确切说明以及我目前所掌握的内容。一如既往,我们将不胜感激。
create a class LetterCount that:
1) stores a single character (a letter) and a count (an integer) in private variables
2) implements the Comparable interface, thus there must be a compareTo() method which should compare two LetterCount objects by their count values
3) overrides toString() with a printable representation that shows the letter and the count
public class LetterCount implements Comparable<LetterCount> {
private String letter;
private int count;
public LetterCount(String l, int x) {
letter = l;
count = x;
}
public String toString() {
return "Letter" + letter + " occurs "+ count " + times";
}
public int compareTo(LetterCount other) {
}
}
return "Letter" + l + " occurs "+ x + " times";
您缺少 +
至于 compareTo,这通常 用于对 LetterCount 对象进行排序。所以在你的情况下比较计数值。
在 toString 中,您将返回 'l' 和 'x',它们是构造函数的局部变量。你应该使用字母和计数
而且您还在字符串“times”中包含了 +。
对于 compareTo 你需要为 count
添加一个 getterpublic int getCount() {
return count;
}
@Override
public int compareTo(LetterCount o) {
if(count > o.getCount()){
return 1;
}else if(count == o.getCount()){
return 0;
}else{
return -1;
}
}
return "Letter" + letter + " occurs " + count + " times";
缺少一个+,变量名错误。
public int compareTo(LetterCount other) {
if ( count < other.count )
return -1;
else if (count == other.count)
return 0;
else
return 1;
}
您一直在尝试打印出 l
和 x
,它们是在构造函数中传递给您的参数。当您尝试在 toString
中使用它们时,它们在 范围 中不存在——也就是说,Java 看不到它们。您应该使用在构造函数中分配给的实例变量(letter
和 count
)。这些对你的 class 的所有方法一直可用,不像 l
和 x
是 local,并且只存在于构造函数中.
另外,你说你想比较 LetterCount
个实例的数量。 Integer.compare
函数将为您完成。请参阅文档 http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#compare(int,%20int)
public class LetterCount implements Comparable<LetterCount>
{
private String letter;
private int count;
public LetterCount(String l, int x)
{
letter = l;
count = x;
}
public String toString()
{
return "Letter" + letter + " occurs "+ count +" times";
}
public int compareTo(LetterCount other)
{
return Integer.compare(this.count, other.count);
}
}