java中二维数组的求和
我创建了一个名为的2d对象数组,它存储字符串country和双数组。我很难实现一个函数来检索某个国家在某个时期内的手机统计数据。基本上,如果年份小于1983年(因为数据的起始年份始于1983年),它应该返回-1,因为它超出范围。试图实现的函数被调用java中二维数组的求和,java,multidimensional-array,Java,Multidimensional Array,我创建了一个名为的2d对象数组,它存储字符串country和双数组。我很难实现一个函数来检索某个国家在某个时期内的手机统计数据。基本上,如果年份小于1983年(因为数据的起始年份始于1983年),它应该返回-1,因为它超出范围。试图实现的函数被调用 getNumSubscriptionsInCountryForPeriod(String country, int startYear, int endYear) 它需要您打算打印统计数据的国家、年初和年末。然后,通过获得该年的指数差来添加所选时间
getNumSubscriptionsInCountryForPeriod(String country, int startYear, int endYear)
它需要您打算打印统计数据的国家、年初和年末。然后,通过获得该年的指数差来添加所选时间段的总和,但我在实现它时遇到了问题。例如,如果我通过(“美国”,1983年,1989年),它应该打印1983年和1989年之间的总统计数据的总和。显示应为:美国(1983年至1989年):3.14。我在尝试访问对象中的值时遇到问题,无法转换/转换为对象。请你的建议会有帮助
public class CellularData {
private Object [][]array;
public CellularData(int rows, int columns, int year)
{
array = new Object[rows+1][columns+1];
array[0][0] = "Country";
this.year = year;
for(int i=1;i<=columns;i++)
{
array[0][i] = year++;
}
}
public void addCountry(String country, double []num)
{
for(int i=0;i<array.length;i++)
{
if(array[i][0] == null)
{
addCountry(country, num, i);
break;
}
}
}
private void addCountry(String country, double []num, int row)
{
array[row][0] = country;
for(int j = 1;j<array[row].length;j++)
{
array[row][j] = num[j-1];
}
}
public double getNumSubscriptionsInCountryForPeriod(String country, int sYear, int eYear)
{//trouble implementing the function
double sum = 0;
int indexStart = (int)(sYear - ((Integer) array[0][1]).doubleValue());
for(int i=1;i<array.length;i++)
{
if(array[i][0]==country && ((sYear<year)||(eYear>year)))
{
//System.out.print(array[i][0]);
}
}
return sum;
}
public String toString()
{
for(Object []a: array)
{
for(Object k:a)
{
System.out.print(k + "\t");
}
System.out.println();
}
return " ";
}
}
public class TestCellularData {
public static void main(String []args)
{
final double[] usaPartial = {0,0,0.14,.28,.5,.83,1.39};
final double[] canadaPartial = {0,0,.05,.23,.37,.75,1.26};
final double[] mexicoPartial = {0,0,0,0,0,0,0.01};
int numRows = 3;
int numColumns = canadaPartial.length;
int startingYear = 1983;
CellularData datatable = new CellularData(numRows, numColumns, startingYear);
datatable.addCountry("USA", usaPartial);
datatable.addCountry("Mexico", mexicoPartial);
datatable.addCountry("Canada", canadaPartial);
System.out.println(datatable);
System.out.printf("usa (1983 to 1989): %.2f \n", datatable.getNumSubscriptionsInCountryForPeriod("usa",1983,1989));
// country is "usa", subscriptions from 1983 to 1989
// the output is:
// usa (1983 to 1989): 3.14
System.out.printf("mexico (1983 to 1989): %.2f \n", datatable.getNumSubscriptionsInCountryForPeriod("mexico",1983,1989));
// country is "mexico", subscriptions from 1983 to 1986
// the output is:
// mexico (1983 to 1989): 0.01
// NOTE: in order to get this result, you must test beyond the sample data included here and refer to the CSV file.
System.out.printf("canada (1890 to 2000): %.2f \n", datatable.getNumSubscriptionsInCountryForPeriod("canada",1890, 2000));
// the output is:
// ERROR : requested year 1890 is less than starting year 1893
// canada (1890 to 2000): -1.00
}
公共类赛璐珞数据{
私有对象[][]数组;
公共赛璐珞数据(整数行、整数列、整数年)
{
数组=新对象[行+1][列+1];
数组[0][0]=“国家”;
今年=年;
对于(int i=1;i首先,添加您在数组中拥有的国家/地区数:
public class CellularData {
private Object[][] array;
private final int year;
private int countryNum = 0; // number of countries in array
public CellularData(int rows, int columns, int year) {
array = new Object[rows + 1][columns + 1];
array[0][0] = "Country";
this.year = year;
for (int i = 1; i <= columns; i++) {
array[0][i] = year++;
}
countryNum = 1;
}
接下来,在getNumSubscriptionsInCountryForPeriod
方法中,您必须以java方式比较字符串。不是通过=
Operator,而是通过equals()
方法。您在数组中使用“USA”,在测试中使用“USA”,因此需要忽略大小写比较:equalsIgnoreCase()
:
接下来,您可以将方法修改为:
public void addCountry(String country, double[] num) {
addCountry(country, num, countryNum++);
}
public double getNumSubscriptionsInCountryForPeriod(String country, int sYear, int eYear) {
double sum = 0;
for (int i = 1; i < array.length; i++) {
if (country.equalsIgnoreCase((String) array[i][0])) {
int start = 1 + sYear - year;
int end = start + (eYear - sYear);
if (start >= 0 && end < array[i].length) {
for (int k = start; k <= end; k++) {
// System.out.println(">> " + country + " adding " + array[i][k]);
sum += (Double) array[i][k];
}
}
}
}
return sum;
}
public-double-getNumSubscriptionsInCountryForPeriod(字符串country、int-sYear、int-eYear){
双和=0;
for(int i=1;i=0&&endpublic double getNumSubscriptionsInCountryForPeriod(String country, int sYear, int eYear) {
double sum = 0;
for (int i = 1; i < array.length; i++) {
if (country.equalsIgnoreCase((String) array[i][0])) {
int start = 1 + sYear - year;
int end = start + (eYear - sYear);
if (start >= 0 && end < array[i].length) {
for (int k = start; k <= end; k++) {
// System.out.println(">> " + country + " adding " + array[i][k]);
sum += (Double) array[i][k];
}
}
}
}
return sum;
}