【问题标题】:shuffle numbers in an Arraylist随机播放 Arraylist 中的数字
【发布时间】:2018-01-27 17:51:41
【问题描述】:

@SuppressLint("SetTextI18n") public void kocokAjah(查看视图){

    TextView textViewCard = findViewById(R.id.textViewCard);
    relativeLayoutGone.setVisibility(View.INVISIBLE);
    textViewCard.setVisibility(View.VISIBLE);

    int MyFirstNumber = Integer.parseInt(editNumBegin.getText().toString());
    int MyLastNumber = Integer.parseInt(editNumEnd.getText().toString());

    ArrayList<String> kocok = new ArrayList<>();
    for (int i = MyFirstNumber; i <= MyLastNumber; i++) {

        kocok.add(Integer.toString(i));
        Collections.shuffle(kocok);

        textViewCard.setText((CharSequence) kocok);

    }
}

}

这是我在 ArrayList 中随机播放数字的代码,然后将其发送到 TextView。 但是每当我执行代码时,应用程序就会崩溃。

日志: 致命例外:主要 进程:com.theinmark.fernando.kocoktestmainactivity,PID:6506 java.lang.IllegalStateException:无法执行活动的方法 在 android.view.View$1.onClick(View.java:4020) 在 android.view.View.performClick(View.java:4780) 在 android.view.View$PerformClick.run(View.java:19866) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 引起:java.lang.reflect.InvocationTargetException 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 android.view.View$1.onClick(View.java:4015) 在 android.view.View.performClick(View.java:4780) 在 android.view.View$PerformClick.run(View.java:19866) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 原因:java.lang.ClassCastException:java.util.ArrayList 无法转换为 java.lang.CharSequence 在 com.theinmark.fernando.kocoktestmainactivity.MainActivity.kocokAjah(MainActivity.java:91) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 android.view.View$1.onClick(View.java:4015) 在 android.view.View.performClick(View.java:4780) 在 android.view.View$PerformClick.run(View.java:19866) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 01-27 16:21:27.520 6506-6506/? I/Process:发送信号。 PID:6506 SIG:9

有什么建议吗? 谢谢

【问题讨论】:

    标签: arraylist


    【解决方案1】:

    在那长长的错误信息中间你会发现:

    Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.CharSequence
    

    问题是 ArrayList(不管它包含什么)不是 CharSequence。如果我没记错的话,字符串实现了 CharSequence,所以也许你会想要构建一个字符串而不是字符串列表。

    快速而肮脏的方法是将字符串“添加”在一起。

    String kocok="";
    for(...) {
        kocok += Integer.toString(i);
    }
    

    更好的方法是使用 StringBuilder。但只有将很多字符串加在一起时才真正有必要。

    另请注意,您在循环内的文本视图上调用setText。你通常会在循环之后这样做。

    如果您想在将数字附加到字符串之前对其进行洗牌,我建议您首先将数字添加到数组中,然后在该循​​环洗牌一次之后,然后另一个循环转换为字符串,然后在该集合之后文本字段上的文本。

    /* Pseudocode.*/
    for (int i; ...) {
        array.add(i);
    }
    Collections.shuffle(array);
    String str=""
    for (int i: array) { /* for each int i in array. */
        str+=i;
    }
    textview.setText(str);
    

    【讨论】:

    • 太神奇了,我有这个答案。太棒了,感谢上帝,哇。非常感谢你@Brainstorm
    • 我已经尝试过您提供的解决方案。另一个问题是,“如何在不重复的情况下调用打乱的数字列表?”。 . List 数字 = new ArrayList(); for (int i = MyFirstNumber; i
    猜你喜欢
    • 2017-11-11
    • 2011-10-28
    • 2023-01-23
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 1970-01-01
    相关资源
    最近更新 更多