我试图创建一个二维数组,然后找到数组中所有元素的平均值
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;
}
答案 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]
。您在功能主体中拥有正确的权限,因此致敬!