大家好,我无法实现这个特殊问题。每次我添加订阅列表检查我是否需要更新" minYear"和" maxYear"。以后使用" minYear"和" maxYear"检查所请求的订阅期是否有效。基本上我试图确定订阅链接列表的年份范围。
Class SubscriptionYear:首先读取特定国家/地区的年份和细胞数据。这是从文件中读取的。它包含当年的年份和统计数据。
以下是我的SubscriptionYear代码:
public class SubscriptionYear {
private int year;
private double subscriptions;
SubscriptionYear next;
//stores the year and it's statistical data.
public SubscriptionYear(int year,double subscriptions)
{
setYear(year);
setSubscription(subscriptions);
this.next = null;
}
//sets the year
public void setYear(int Year)
{
this.year= Year;
}
//sets the cellular data.
public void setSubscription(double value)
{
this.subscriptions = value;
}
public int getYear()
{
return year;
}
//returns the stat data
public double getSubscription()
{
return subscriptions;
}
public String toString()
{
return "Number of Subscriptions: "+subscriptions;
}
//sets the node
public void setNode(SubscriptionYear next)
{
this.next = next;
}
public SubscriptionYear getNext()
{
return this.next;
}
}
班级国家: 这将读取国家/地区名称,并充当存储年份和统计数据的对象节点SubscripitpnYear的容器。它具有变量字段minYear和maxYear,用于检查订阅何时添加到列表中(如果需要更新)。使用minYear和maxYear检查请求的订阅是否有效。这是我在列表中添加SusbcriptionYear时无法实现的地方我如何检查是否需要更新minYear和maxYear?并使用minYear和maxYear来检查订阅是否有效?
我的班级国家:
public class Country {
//variable fields.
private String countryNames;
private SubscriptionYear subscriptions;
private int minYear;
private int maxYear;
public Country(String country)
{
this.countryNames = country;
this.subscriptions = null;
this.maxYear = 0;
this.minYear = 9999;
}
//adds the subscription.
public void addSubscriptionYear(int year, double subscription)
{
SubscriptionYear newNode = new SubscriptionYear(year, subscription);
if(this.isEmpty())
{
newNode.setNode(subscriptions);
subscriptions = newNode;
}
else{
SubscriptionYear current = subscriptions;
while(current.getNext()!=null)
{
current = current.getNext();
}
current.setNode(newNode);
}
}
//need help implementing this function
public void update(int minYear, int maxYear)
{
}
//overrides the toString method and prints out the countries.
public String toString()
{
String result="";
result += "\n"+this.countryNames;
SubscriptionYear current = subscriptions;
while(current!=null)
{
result+="\t"+current.getSubscription();
current = current.getNext();
}
return result;
}
//returns countryName
public String getName()
{
return this.countryNames;
}
//overrides the equals method and returns country name if found
public boolean equals(Object obj)
{
return this.countryNames.equalsIgnoreCase(((Country) obj).getName());
}
public boolean isEmpty()
{
return (subscriptions == null);
}
答案 0 :(得分:0)
-1- 嗯,这里有很多代码,但我会尝试。
你的getNext()
方法让我困惑,可能是许多经验丰富的Java开发人员。在java集合(例如List)中,您可以获得迭代器(https://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html)。那里" hasNext()"是一个布尔值"是否有另一个对象?)并且可以在while()
控件中使用。 next()
都返回下一个项,使迭代器前进以指向以下项。因此...... getNext()
和while()
中都有setNode()
看起来很可疑。
您的代码使用getNext()
设置" next"和setNode()
来检索它。传统上(因此许多人更容易理解意图)将遵循命名约定。对于成员变量" node"这将是getNode()
& SubscriptionYear current = subscriptions;
while(current.getNext()!=null)
{
current = current.getNext();
}
current.setNode(newNode);
。
-2- 好吧,就是说,看起来像这段代码:
newNode
遍历订阅并将SubscriptionYear
放在最后。
double
中,它似乎是您拥有的订阅数量(为什么int
?Country
似乎更好)。但是,在SubscriptionYear
中,它是update()
的自制列表,持有第一个。
IOM,解决方案的路径包括澄清您的代码,使用更好的名称,以便您了解它的作用。
-3-
除了Country.equals()
中的评论之外,你有一个具体的问题吗?也许你应该说明该方法应该做什么,提出逻辑等等。
- 其他观察:
-1-
false
是粗略的。如果传入的对象不属于同一类,它应返回ClassCastException
,而不是public boolean equals(Object obj)
{
if (this==obj){return true;}
if (! (obj instanceof Country)) { return false; }
return this.countryNames.equalsIgnoreCase(((Country) obj).getName());
}
。更好:
equals()
-2-
你已经犯了java-developer-sin;实施hashCode()
和{{1}}之一。重要的是 - 始终 - 实施两者,或两者都不实施。更多内容(读取equals()和hashCode()描述)。
https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html