简体   繁体   English

从数组中随机选择一个索引,在TextView中显示

[英]Randomly pick an index from an array, display in TextView

I'm new to Android development and I'm wondering why my code crashes the Android Emulator. 我是Android开发的新手,我想知道为什么我的代码崩溃Android模拟器。 What I'm doing is creating an array of strings, then picking an index from the array at random and displaying the value inside a TextView . 我正在做的是创建一个字符串数组,然后随机从数组中选择一个索引并在TextView显示该值。 But it always seems to crash my emu. 但似乎总是让我的鸸crash崩溃。

package com.test.randomTest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class randomTestActivity extends Activity {

    private Button button;
    private TextView helloTextView;
    private String[] hellos;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        helloTextView = (TextView)findViewById(R.id.helloText);
        button = (Button)findViewById(R.id.button);

        hellos = new String[7];
        hellos[0] = "Hello";
        hellos[1] = "G'days";    
        hellos[2] = "Yo!";
        hellos[3] = "Hi";
        hellos[4] = "Hay";
        hellos[5] = "Bonjour";
        hellos[6] = "Hay there!";
        hellos[7] = "Hallo";

        button.setOnClickListener(buttonListener);

    }

    private OnClickListener buttonListener = new OnClickListener() {

        public void onClick(View v) {

            int x = 0 + (int)(Math.random() * ((7 - 0) + 1));
            String helloText = hellos[x];
            helloTextView.setText(helloText);

        }
    };
}

Any help/advice would be great! 任何帮助/建议都会很棒!

Thanks. 谢谢。

You created a String[] of size 7. 您创建了一个大小为7的String[]

hellos = new String[7];

Therefore the indices range from 0 to 6. Trying to access hellos[7] will cause an IndexOutOfBoundsException . 因此索引范围从0到6.尝试访问hellos[7]将导致IndexOutOfBoundsException

I assume your getting a nullpointerexecption. 我假设你得到了一个nullpointerexecption。 Try generating your random number like this instead: 尝试生成这样的随机数:

Random rando = new Random();
int x = rando.nextInt(hellos.lenght);
package com.test.randomTest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class randomTestActivity extends Activity {

    private Button button;
    private TextView helloTextView;
    private String[] hellos;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        helloTextView = (TextView)findViewById(R.id.helloText);
        button = (Button)findViewById(R.id.button);

        hellos = new String[8];
        hellos[0] = "Hello";
        hellos[1] = "G'days";    
        hellos[2] = "Yo!";
        hellos[3] = "Hi";
        hellos[4] = "Hay";
        hellos[5] = "Bonjour";
        hellos[6] = "Hay there!";
        hellos[7] = "Hallo";

        button.setOnClickListener(buttonListener);

    }

    private OnClickListener buttonListener = new OnClickListener() {

        public void onClick(View v) {

            int x = 0 + (int)(Math.random() * ((7 - 0) + 1));
            String helloText = hellos[x];
            helloTextView.setText(helloText);

        }
    };
}

Increase string array size you gave 7 as size, but you are passing 8 values to string. 增加您给出7作为大小的字符串数组大小,但是您将8个值传递给字符串。 so it throws indexoutofbounds exception. 所以它抛出indexoutofbounds异常。

这可能是因为数组IndexOutOfBoundException ...因为有时你的x将有值8但数组长度只有7 ..

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM