- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图让我的 CompareTo 方法从 Artist 类中工作,但是它不会从 Album 类中获取 AlbumName 。我很确定这是专辑类上的 IComparable 的问题。请帮助提供代码特定的答案,谢谢。
错误 1“Assignment.Album”未实现接口(interface)成员“System.IComparable.CompareTo(object)”
专辑类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Assignment
{
class Album : IComparable
{
public string albumName;
public Album(string albumName)//constructors
{
this.albumName = albumName;
}
public string AlbumName
{
get { return albumName; }
set { albumName = AlbumName; }
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Assignment
{
public class Artist : IComparable
{
private String name;
int members = 4;//default number of members
//string albumName;
LinkedList<Artist> albums = new LinkedList<Artist>();
public override string ToString()//to make my own toString method
{
return ("Name: " + name + "Number of Members: " + members);
}
public Artist(string name, int members)//constructors
{
this.name = name;
this.members = members;
}
public string Name
{
get { return name; }
set { name = Name; }
}
public int Members
{
get { return members; }
set { members = value; }
}
public int CompareTo(object obj)
{
if (obj is Artist) //compare by name
{
Artist other = (Artist)obj;
return name.CompareTo(other.name);//artist name
}
if (obj is string) //compare against list of album titles
{
string other = obj.ToString();
if (obj.Equals(name.AlbumName))
return 0;
return -1;
}
else
return -999; //indicates can’t make a comparison
}
}
}
最佳答案
您发布的错误消息说您的 Album 类中没有 Compare(object) 方法。您的代码证实了这一点。所以……加一个!
编辑
好的,让我们分解一下。你显然学到了很多东西,并尝试了很多新东西。那太棒了。对你的目标和工具有一个扎实的想法很有帮助,所以让我们来谈谈这些。
根据您的评论,很明显您打算使用 IComparable
用于排序和保证表单的唯一性。一般IComparable
不用于唯一性,但您有“业务需求”来使用它,所以......
让我们谈谈手头的工具。我想你只需要了解IComparable
方法。这意味着实现它的类具有自然顺序,例如列表中的数字或(咳咳)名称。具体来说,它保证了三个非异常结果:
this
是“小于”参数:返回一些小于 0 的数字 this
是“大于”参数:返回大于 0 的数字 this
与参数的顺序相同:返回 0。-999
正如你所做的那样,不会告诉任何人任何有用的东西。如果您真正拥有的任何东西都无法比较,那么正确的做法是抛出异常。
IComparable
用到了,我们来说说它通常是怎么实现的。
IComparable
的通用版本:
System.IComparable<T>
.如果你的类需要比较字符串,它应该实现
IComparable<string>
以及
IComparable<Artist>
或者你有什么。如果这样做,您的类(class)将如下所示:
public class Artist : IComparable<string>, IComparable<Artist>
{
// your code here
public int Compare(string name)
{
// your code here
}
public int Compare(Artist artist)
{
// your code here
}
}
IComparable
的旧技术接口(interface),你也可以像这样实现它:
public int Compare(object obj)
{
if (obj == null) return -1; // maybe you want to throw an exception instead?
if (obj is string) return Compare((string) obj);
if (obj is Artist) return Compare((Artist) obj);
throw new ArgumentException("wtf, unexpected type");
}
关于c# - CompareTo 方法不起作用,它不会从 Album 类中获取 AlbumName - 我认为是 IComparable 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15530854/
这似乎很奇怪,这并没有像我预期的那样工作。我编写了一个简单的java类,它实现Comparable接口(interface)并重写compareTo()方法。但是,它不允许我传递除对象之外的特定类型的
public int compareTo(Object another) throws CustomMadeException { if(this.getClass() != another.
早些时候,我在通用 IComparable 中获得了逆变的具体示例Jon Skeet 的界面。然而,这又产生了另一个问题。为什么不是通用的 List.Sort()方法能够推断出相同的信息? 我在这里提
我有注释 package javaannotationtest; import java.lang.annotation.*; @Target({ElementType.METHOD}) @Reten
我试图理解 C# 中的 CompareTo(),下面的示例让我比以往任何时候都更加困惑。有人能帮我理解为什么第三个变体的结果是 1 吗?句子“Hello wordd”中的第二个词与 str1“Hell
我已经在这个程序上工作了几天,并且在我的 BinarySearchTree 类中实现了一些主要方法,例如插入和删除。插入似乎工作正常,但是一旦我尝试删除,我就会不断出错。因此,在玩弄了代码之后,我想测
首先,我必须提到的是,在阅读了大量问题和教程并观看了一些视频后,问题仍然没有解决。 我是一名Java中级程序员,我编写了一些用于比较优先级队列中的元素的代码,其中元素的保存方式类似于[Comparab
我只是在为即将到来的考试做一些复习。我发现了我们的讲师给我们提供的这段代码供我们修改。 代码: public class Employee implements Comparable{ private
我的书要求我为一段代码编写 Javadoc 注释。大多数情况下,我了解如何执行 javadocs,但我不了解该程序在做什么。 “为类 Person 的以下方法编写 Javadoc 注释。假设类 Per
如果我写以下内容是否有可能溢出: public class SomeObj implements Comparable { private final float data; pub
我有一个名为任务的类,我想将其放入 PriorityQueue 中。 我的类(class)通过日期和名为isUrgent的 boolean 字段进行比较 @Override publ
这个问题已经有答案了: Java error: Comparison method violates its general contract (13 个回答) 已关闭 7 年前。 我有这个compa
我的类(class)结构: public class Priorityy implement Comparable { public int compareTo(Object pe) {
给定一个非负整数列表,我想对它们进行排列,使它们形成最大的数字。给定 [1, 20, 23, 4, 8],最大的形成数字是 8423201。但我想弄清楚compareTo 方法中变量的顺序如何影响 A
我想通过上次联系日期比较两个“收件人”,如果相同,则通过地址进行比较。这是我的代码: public class RecipientComparator implements Comparator {
package Comparable; public class Movie implements Comparable { private double rating; privat
您好,我在实现compareTo 方法时遇到问题。我一直在寻找答案,但没有任何帮助。我正在尝试用各种大小的圆圈填充 TreeSet。我需要在我的圈子类中使用compareTo 才能以这种方式存储它们。
我有以下代码;目的是返回数组中按字母顺序排列的最小成员。 public String smallest() { String smallest = ""; int i = 0; while(log[i
我有一个关于compareTo函数如何协助比较器进行排序的问题即 o1.compareTo(o2) 与 o2.compareTo(o1) 如果两个字符串相等,则此方法返回 0,否则返回正值或负值。如果
帮助我无法弄清楚compareTo函数。这就是我必须做的:编写一个compareTo函数,可用于根据以下内容按顺序放置产品到他们的零件号。也就是说,后面按字母顺序排列的零件号顺序大于按字母顺序排列较早
我是一名优秀的程序员,十分优秀!