Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.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_Android_Arrays - Fatal编程技术网

Java 初始化对象数组成功后,应用程序崩溃

Java 初始化对象数组成功后,应用程序崩溃,java,android,arrays,Java,Android,Arrays,我想从字符串数组初始化对象数组 我有一个数组,它有6条字符串记录,我想初始化两个具有相同字符串记录的对象,这意味着在数组中,对象将有12条记录 出于某种原因,我设法实例化了对象数组,但在循环结束后,应用程序崩溃了 public class Card { private String pic; public Card(String pic) { this.pic = pic; } public String getPic() {

我想从字符串数组初始化对象数组

我有一个数组,它有6条字符串记录,我想初始化两个具有相同字符串记录的对象,这意味着在数组中,对象将有12条记录

出于某种原因,我设法实例化了对象数组,但在循环结束后,应用程序崩溃了

public class Card {
    private String pic;

    public Card(String pic) {
        this.pic = pic;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic;
    }

    @Override
    public String toString() {
        return "Card{" +
                "pic='" + pic + '\'' +
                '}';
    }
}
2020-05-27 17:36:37.345 358-358/? I/case: crocodile 0
2020-05-27 17:36:37.345 358-358/? I/case: crocodile 1
2020-05-27 17:36:37.345 358-358/? I/case: duck 2
2020-05-27 17:36:37.345 358-358/? I/case: duck 3
2020-05-27 17:36:37.345 358-358/? I/case: lizard 4
2020-05-27 17:36:37.345 358-358/? I/case: lizard 5
2020-05-27 17:36:37.345 358-358/? I/case: mosqitue 6
2020-05-27 17:36:37.345 358-358/? I/case: mosqitue 7
2020-05-27 17:36:37.345 358-358/? I/case: parrot 8
2020-05-27 17:36:37.345 358-358/? I/case: parrot 9
2020-05-27 17:36:37.345 358-358/? I/case: zebra 10
2020-05-27 17:36:37.345 358-358/? I/case: zebra 11
卡片档案结束

package com.example.memorygame;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class MainActivity extends AppCompatActivity {
    private void main() {
        String[] pictures = {"crocodile", "duck", "lizard", "mosqitue", "parrot", "zebra"};
        //String[] pictures = {"crocodile", "crocodile", "duck","duck", "lizard","lizard", "mosqitue","mosqitue", "parrot","parrot", "zebra" ,"zebra"};
        Card[] cards = new Card[pictures.length*2];
        Functions functions = new Functions();

        for (int i = 0; i < cards.length*2; i+=2) {
            cards[i] = new Card(pictures[i/2]);
            cards[i + 1] = new Card(pictures[i/2]);
            Log.i("case", cards[i].getPic()+" "+String.valueOf(i));
            Log.i("case", cards[i].getPic()+" "+String.valueOf(i+1));
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        main();
    }
}

这些日志之后我没有任何内容,我也找不到应用程序崩溃的任何原因。

您正在迭代I,这会导致I+=2上出现
ArrayIndexOutOfBoundsException
,而条件应该是
I
。尝试在循环中更改以下条件,它应该可以正常工作

public class Card {
    private String pic;

    public Card(String pic) {
        this.pic = pic;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic;
    }

    @Override
    public String toString() {
        return "Card{" +
                "pic='" + pic + '\'' +
                '}';
    }
}
2020-05-27 17:36:37.345 358-358/? I/case: crocodile 0
2020-05-27 17:36:37.345 358-358/? I/case: crocodile 1
2020-05-27 17:36:37.345 358-358/? I/case: duck 2
2020-05-27 17:36:37.345 358-358/? I/case: duck 3
2020-05-27 17:36:37.345 358-358/? I/case: lizard 4
2020-05-27 17:36:37.345 358-358/? I/case: lizard 5
2020-05-27 17:36:37.345 358-358/? I/case: mosqitue 6
2020-05-27 17:36:37.345 358-358/? I/case: mosqitue 7
2020-05-27 17:36:37.345 358-358/? I/case: parrot 8
2020-05-27 17:36:37.345 358-358/? I/case: parrot 9
2020-05-27 17:36:37.345 358-358/? I/case: zebra 10
2020-05-27 17:36:37.345 358-358/? I/case: zebra 11
 for (int i = 0; i < pictures.length; i++) {
      cards[2*i] = new Card(pictures[i]);
      cards[2*i + 1] = new Card(pictures[i]);
      Log.i("case", cards[2*i].getPic()+" "+String.valueOf(i));
      Log.i("case", cards[2*i+1].getPic()+" "+String.valueOf(i+1));
}
for(int i=0;i

另外,请确保您的logcat具有在应用程序崩溃时能够看到异常的配置。

您正在迭代i,这会导致i+=2上出现
ArrayIndexOutOfBoundsException
,而条件应该是
i
。尝试在循环中更改以下条件,它应该可以正常工作

 for (int i = 0; i < pictures.length; i++) {
      cards[2*i] = new Card(pictures[i]);
      cards[2*i + 1] = new Card(pictures[i]);
      Log.i("case", cards[2*i].getPic()+" "+String.valueOf(i));
      Log.i("case", cards[2*i+1].getPic()+" "+String.valueOf(i+1));
}
for(int i=0;i

此外,请确保您的logcat具有在应用程序崩溃时能够看到异常的配置。

您使用错误的长度进行迭代,这导致IndexOutOfBoundsException,因此应用程序正在崩溃

for (int i = 0; i < cards.length; i+=2) {
        cards[i] = new Card(pictures[i/2]);
        cards[i + 1] = new Card(pictures[i/2]);
        Log.i("case", cards[i].getPic()+" "+String.valueOf(i));
        Log.i("case", cards[i+1].getPic()+" "+String.valueOf(i+1));
    }
for(int i=0;i
同样在上一个日志中,我在打印卡片[i]的值,它给出了相同的值,但它是错误的,它只打印了0,2,4,6,8,10的值。
它应该打印0,1,2,3,4,5,6,7,8,9,10,11的值。

您使用错误的长度进行迭代,导致IndexOutOfBoundsException,因此应用程序正在崩溃

for (int i = 0; i < cards.length; i+=2) {
        cards[i] = new Card(pictures[i/2]);
        cards[i + 1] = new Card(pictures[i/2]);
        Log.i("case", cards[i].getPic()+" "+String.valueOf(i));
        Log.i("case", cards[i+1].getPic()+" "+String.valueOf(i+1));
    }
for(int i=0;i
同样在上一个日志中,我在打印卡片[i]的值,它给出了相同的值,但它是错误的,它只打印了0,2,4,6,8,10的值。
它应该打印0,1,2,3,4,5,6,7,8,9,10,11的值。

一旦进入i的范围,即实际数组大小的两倍,您认为会发生什么?你不是得到一个数组索引越界异常吗?请阅读有关调试代码的提示。你认为一旦进入i的范围,即实际数组大小的两倍,会发生什么情况?你没有得到数组索引越界异常吗?请阅读有关调试代码的提示。我觉得
I
比I+=2更可读,然后使用I/2获得picture@SairajSawant,是的,它更可读,但问题是我们要在card中添加值,所以最好使用cards.length进行迭代,虽然他的要求都是正确的。我觉得
I
比I+=2更可读,然后用I/2来获得picture@SairajSawant,是的,它更可读,但问题是我们要在card中添加值,所以最好使用cards.length进行迭代,尽管在他的要求中,这两项都是正确的。这将只生成12个更新答案中的7条记录。这将只生成12个更新答案中的7条记录。