我正在读取一个csv文件,该文件读取国家/地区名称并在特定年份获取特定国家/地区的订阅数据。下面是一个csv示例文件:
CountryName,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012
Aruba,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.029310471,0,0,2.138784453,3.605985937,3.98141538,6.16435217,13.48254011,16.50927821,57.05427692,65.05605558,72.10431377,99.64250268,103.3849507,108.1325002,112.2180618,119.2038996,126.2103374,129.72824,0,131.8565401
Andorra,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1.307211734,1.278625641,1.250259142,4.424155104,8.538444783,13.44671556,22.12730607,32.14530928,35.99902139,43.27794118,45.77115817,68.60251444,73.82494308,79.48487497,84.27763597,78.1171579,80.2836099,82.06181111,84.06818386,83.53432222,81.50204186
Afghanistan,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.112598381,0.865196277,2.498055472,4.826865367,9.833164022,17.71624331,29.22037376,37.89493697,45.77817474,60.32631999,60.35299258
我能够正确读取文件。我创建了2个类。 1个名为class subscriptionYear
的类,它读取我调用int year
的年份,以及读取每个统计数据的变量double subscription
。第二节叫Class Country
。它读取名为String countryNames
的国家和名为SubscriptionYear[] subscriptions
的1d数组,其中包含该国家/地区的所有订阅数据。我在类国家/地区有两个名为addSubscriptionYear(int year, double countryData)
的方法,它们读取的数据我遵循名为class TestCountry
的测试类的指导原则。我的程序读取文件但输出错误的总和。基本上它只读取2012年,而不是1960年到2012年之间的整个时期。因此,当我做总和时,它只输出2012年的统计数据,而不是1960年至2012年的全部总和。我的问题似乎来自{{1}将年份和数据插入addSubscriptionYear method
,但它只读取2012年,而不是从1960年到2012年我尝试调试时的整个时期。我必须遵循class Subscription
的指导原则,因为这是要求。但是我的函数方法TestCountry class
就是问题所在。有人可以帮助我,或者一些提示如何将每年和数据存储在对象数组中。以下是我的文件
类订阅:
addSubscriptionYear()
班级国家:
public class SubscriptionYear {
private int year;
private double subscriptions;
public SubscriptionYear(int year,double subscriptions)
{
//this.year = year;
//this.subscriptions = subscriptions;
setYear(year);
setSubscription(subscriptions);
}
public void setYear(int Year)
{
this.year= Year;
}
public void setSubscription(double value)
{
this.subscriptions = value;
}
public int getYear()
{
return year;
}
public double getSubscription()
{
return subscriptions;
}
public String toString()
{
return "Number of Subscriptions: "+subscriptions;
}
}
Tesfile:
public class Country {
private String countryNames;
private SubscriptionYear[] subscriptions;
private int size;
public Country(String country, int arraylength)
{
this.countryNames = country;
this.size = arraylength;
subscriptions = new SubscriptionYear[size];
}
//seems to be where i am having the problem
//only reads 2012 and not 1960. seems to be my problem
public void addSubscriptionYear(int year, double subscription)
{
for(int i=0;i<subscriptions.length;i++)
{
subscriptions[i]= new SubscriptionYear(year, subscription);
}
//System.out.print(subscriptions[0].getYear()+"\t");
}
public double getNumSubscriptionsForPeriod(int start, int end)
{
double sum = 0;
int head = subscriptions[0].getYear()-start;
int tail = end-start;
if(head>=0&&end<subscriptions.length)/check if out of bounds.
{
for(int k=head;k<=tail;k++)
{
sum += subscriptions[k].getSubscription();
}
} else{ sum =-1;}
return sum;
}
public String toString()
{
System.out.print(countryNames+"\t");
for(SubscriptionYear s: subscriptions)
{
//System.out.print(countryNames+"\t");
System.out.print(s.getSubscription()+"\t");
}
System.out.println();
return "";
}
}
它为aruba输出131.63而不是1170.50。它基本上只读取2012年的统计数据而不是整个1960年到2012年的统计数据。我需要帮助修复类Country中的addSubscriptionYear方法。
答案 0 :(得分:1)
您只保留最后一个日期,因为您在addSubscriptionYear()
方法中放置了一个for循环并且覆盖了所有先前的值,因此请删除for循环,并在表中跟踪当前索引通过在您的类Country
中添加和添加int,每次调用方法addSubscriptionYear()
int lastPos = 0;
public void addSubscriptionYear(int year, double subscription)
{
subscriptions[lastPos]= new SubscriptionYear(year, subscription);
lastPos++;
}