Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中二维数组的求和_Java_Multidimensional Array - Fatal编程技术网

java中二维数组的求和

java中二维数组的求和,java,multidimensional-array,Java,Multidimensional Array,我创建了一个名为的2d对象数组,它存储字符串country和双数组。我很难实现一个函数来检索某个国家在某个时期内的手机统计数据。基本上,如果年份小于1983年(因为数据的起始年份始于1983年),它应该返回-1,因为它超出范围。试图实现的函数被调用 getNumSubscriptionsInCountryForPeriod(String country, int startYear, int endYear) 它需要您打算打印统计数据的国家、年初和年末。然后,通过获得该年的指数差来添加所选时间

我创建了一个名为的2d对象数组,它存储字符串country和双数组。我很难实现一个函数来检索某个国家在某个时期内的手机统计数据。基本上,如果年份小于1983年(因为数据的起始年份始于1983年),它应该返回-1,因为它超出范围。试图实现的函数被调用

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;
}