Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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

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

Java 根据边数掷骰子

Java 根据边数掷骰子,java,android,Java,Android,编辑:请参阅附带的错误日志 我正在尝试创建一个简单的应用程序来在Android Studio中掷不同的骰子。 这是我目前的代码: MainActivity.java package com.example.thomb.tutorialspoint; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.B

编辑:请参阅附带的错误日志

我正在尝试创建一个简单的应用程序来在Android Studio中掷不同的骰子。 这是我目前的代码: MainActivity.java

package com.example.thomb.tutorialspoint;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.TextView;

import java.util.Random;

public class MainActivity extends AppCompatActivity {

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

    Button button = (Button) findViewById(R.id.buttonRoll);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            int roll = RollDice(sidesChosen);
            TextView tv1 = (TextView)findViewById(R.id.textView);
            tv1.setText(roll);
            setContentView(tv1);
        }
    });
}

public int sidesChosen;
public int RollDice(int sides) {
    Random r = new Random();
    return r.nextInt(sides)+1;
} //method
public void onRadioButtonClicked(View view) {
    // Is the button now checked?
    boolean checked = ((RadioButton) view).isChecked();

    // Check which radio button was clicked
    switch(view.getId()) {
        case R.id.radioButtonD4:
            if (checked)
                sidesChosen = 4;
                break;
        case R.id.radioButtonD6:
            if (checked)
                sidesChosen = 6;
                break;
        case R.id.radioButtonD8:
            if (checked)
                sidesChosen = 8;
                break;
        case R.id.radioButtonD10:
            if (checked)
                sidesChosen = 10;
                break;
        case R.id.radioButtonD12:
            if (checked)
                sidesChosen = 12;
                break;
        case R.id.radioButtonD20:
            if (checked)
                sidesChosen = 20;
                break;
    } //switch
} //method
} //class
布局是这样的:

当我点击滚动按钮时,应用程序崩溃了,但我不知道为什么。ID都正确,单选按钮按预期工作。 我使用的是API级别25。我对Java相当陌生,但我对C#非常熟悉,因此问题可能在于代码语法,尽管Android Studio没有报告任何错误。如果您还需要查看布局的XML,请告诉我

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.thomb.tutorialspoint, PID: 5029
              java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
                  at android.view.ViewGroup.addViewInner(ViewGroup.java:4310)
                  at android.view.ViewGroup.addView(ViewGroup.java:4146)
                  at android.view.ViewGroup.addView(ViewGroup.java:4087)
                  at android.view.ViewGroup.addView(ViewGroup.java:4060)
                  at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:279)
                  at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:145)
                  at com.example.thomb.tutorialspoint.MainActivity$1.onClick(MainActivity.java:25)
                  at android.view.View.performClick(View.java:5280)
                  at android.view.View$PerformClick.run(View.java:21239)
                  at android.os.Handler.handleCallback(Handler.java:739)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:234)
                  at android.app.ActivityThread.main(ActivityThread.java:5526)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
setText()。这里的
int
应该是字符串资源ID。这就是您的错误所在。在下面的代码中,您使用的是
setText(int)
,但未传递有效的字符串资源ID

int roll = RollDice(sidesChosen);
...
tv1.setText(roll);
先执行
setText(String.valueOf(roll)
将其转换为字符串

日志发布后编辑:

错误的原因是将0传递给
nextInt()
方法。这可能是因为您从未选择过RadioButton(默认情况下sidesChosen为0),或者即使选择了RadioButton,也没有输入
开关的
大小写

第二次日志发布后编辑:(…)

删除
setContentView(tv1);
这用于将布局附加到活动。为什么在此处使用它?

setText()
是一个重载方法,有两种类型:一种接受
字符串,另一种接受
int
。这里的
int
应该是字符串资源ID。这就是错误所在。在下面的代码中,您使用的是
setText(int)
,但没有传递有效的字符串资源ID

int roll = RollDice(sidesChosen);
...
tv1.setText(roll);
先执行
setText(String.valueOf(roll)
将其转换为字符串

日志发布后编辑:

错误的原因是将0传递给
nextInt()
方法。这可能是因为您从未选择过RadioButton(默认情况下sidesChosen为0),或者即使选择了RadioButton,也没有输入
开关的
大小写

第二次日志发布后编辑:(…)


删除
setContentView(tv1);
用于将布局附加到活动。为什么在此处使用它?

似乎将
0
传递给
Random.nextInt()
方法,这是不允许的

java.lang.IllegalArgumentException: n <= 0: 0
              at java.util.Random.nextInt(Random.java:182)

java.lang.IllegalArgumentException:n似乎您将
0
传递给
Random.nextInt()
方法,这是不允许的

java.lang.IllegalArgumentException: n <= 0: 0
              at java.util.Random.nextInt(Random.java:182)

java.lang.IllegalArgumentException:n您在运行应用程序时使用过logcat吗?您需要输入有关崩溃的更多信息,logcat会告诉您崩溃的原因。如果您熟悉C#我假设您也熟悉调试。当应用程序崩溃时,它会生成崩溃报告,指出导致崩溃的原因和其他非常有用的数据ta.开始调查坠机报告,如果您仍然有问题,可以发布到这里。对我来说,代码看起来不完整。什么是R?所有复选框的R.id是什么…这些是控件,还是已经是布尔值?如果R.id.radioButtonD4是单选按钮,您需要获取id(或名称)您的案例陈述中的收音机。感谢您的回答。很抱歉没有包括崩溃报告,它现在已包含在原始帖子中。您在运行应用程序时使用过logcat吗?您需要输入更多关于崩溃的信息,logcat会告诉您崩溃的原因。如果您熟悉C#我想您也熟悉调试。当应用程序崩溃时,它会生成崩溃报告,指出导致崩溃的原因和其他非常有用的数据。开始调查崩溃报告,如果仍然存在问题,可以将其发布到此处。对我来说,代码看起来不完整。什么是R?什么是R.id以及所有复选框…这些是控件,还是已经是布尔值?它是R.id.radioButtonD4是单选按钮,您需要获取id(或名称)您的案例陈述中的收音机。谢谢您的回答。很抱歉没有包括崩溃报告,它现在已包含在原始帖子中。谢谢,我会记住这一点!尽管我仍然遇到错误。它似乎与使用Random类有关。我现在看到了您的错误日志。在您修复后,这是下一个错误您将遇到:)是的,我修复了TextView和Random错误,但是我现在得到了一个新的错误,我已经在原始帖子中包含了它。谢谢,我会记住这一点!虽然我仍然遇到一个错误。它似乎与Random类的使用有关。我现在看到了你的错误日志。在你修复了它之后,这是你要加密的下一个错误是的,我修复了TextView和随机错误,但我现在得到了一个新的,我已经在原来的帖子中包括了这个。