如何使用2D数组调用函数

时间:2019-07-27 15:04:18

标签: java

我试图创建一个二维数组,然后找到数组中所有元素的平均值

package com.example.myapplication

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import com.google.gson.Gson

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        getEvemtsObject()

    }

    private val jsonString = " {\n" +
            " \t\"events\": [{\n" +
            " \t\t\"id\": 4651,\n" +
            " \t\t\"title\": \"Test title\",\n" +
            " \t\t\"description\": \"testttt\",\n" +
            " \t\t\"image\": {\n" +
            " \t\t\t\"url\": \"https://myhost.tv/wp-content/uploads/2019/07/event2.jpg\",\n" +
            " \t\t\t\"id\": \"4652\"\n" +
            " \t\t}\n" +
            " \t}]\n" +
            " }"

    private fun getEvemtsObject() {
        val gson = Gson()
        System.out.println("from_gson  ---> " + gson.fromJson<EventsFeed>(jsonString,EventsFeed::class.java))
    }

}

但是有错误表明存在不兼容的类型: float[][] dArr = { {1.0f,2.0f}, {2.0f,2.0f} }; System.out.println(average(dArr[2][2])); } static double average (float dArr[][]){ double sum=0; for(int i=0;i<dArr.length;i++) for(int j=0;i<dArr[i].length;j++) sum=+dArr[i][j]; return sum/dArr.length; }

3 个答案:

答案 0 :(得分:1)

调用时实际上并没有将2d数组传递给函数
System.out.println(average(dArr[2][2]));

相反,您只传递了1个浮点数,或者至少传递了,但索引[2] [2]上的元素超出范围。因此将您的函数调用更改为
System.out.println(average(dArr));

,并且应该将数组正确传递给函数。

答案 1 :(得分:1)

几件事。 dArr.length仅计算数组中的行数,不计算项目数。因此,您应该在循环中创建一个计数器以除以除法,或者使用上面建议的乘积。 将总和更改为+ = dArr [i] [j];使用= +不起作用。 在for循环中,您要使用++ i和++ j,而不是i ++和j ++。 在嵌套循环中,您正在测试i而不是j。 这是功能代码

public static void main(String[] args) {
   float[][] dArr = {
       {1.0f, 2.0f},
       {2.0f, 2.0f}
   };
   System.out.println(average(dArr));
}

static double average (float dArr[][]){

    double sum = 0;
    double count = 0;
    for(int i = 0; i < dArr.length; ++i){
        for(int j = 0; j < dArr[i].length; ++j){
            sum += dArr[i][j];
            count += 1;
            System.out.println(sum);
        }
    }
    return sum/count;
}

答案 2 :(得分:0)

您正在将数组的一个值dArr[2][2](无论如何都超出界限;请参见下文)传递给函数。您需要传递整个数组以使用average函数。另外,您需要更改函数的方法签名:

float[][] dArr = {
                      {1.0f,2.0f},
                      {2.0f,2.0f}
                 };
System.out.println(average(dArr));

static double average (float[][] dArr){
    double sum=0;
    for(int i=0;i<dArr.length;i++){
        for(int j=0;i<dArr[i].length;j++){
            sum=+dArr[i][j];
        }
    }
    return sum / (dArr.length * dArr[0].length);
}

您会注意到最后一行的更改。要获得数组中元素的总数,我们必须将行乘以列。 dArr.length给出了行数,而dArr[0].length给出了第一行的列数,每一行都相同。

还要注意,Java中的数组是零索引的。因此,数组中的最后一个元素的索引是[1][1]而不是[2][2]。您在功能主体中拥有正确的权限,因此致敬!