gpt4 book ai didi

java - 根据面数掷骰子

转载 作者:行者123 更新时间:2023-12-01 17:59:34 25 4
gpt4 key购买 nike

编辑:请参阅包含的错误日志。

我正在尝试创建一个简单的应用程序来在 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

布局如下: /image/adpP1.png

当我点击滚动按钮时,应用程序崩溃了,但我不知道为什么。 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() 是一个重载方法,有两种类型:一种接受 String,另一种接受 int。这里的int应该是字符串资源ID。这就是你的错误所在。在下面的代码中,您使用 setText(int) 但未传递有效的字符串资源 ID。

int roll = RollDice(sidesChosen);
...
tv1.setText(roll);

首先执行 setText(String.valueOf(roll) 将其转换为字符串

日志发布后编辑:

错误的原因是您将 0 传递给 nextInt() 方法。发生这种情况的原因可能是您从未选择过 RadioButton(sidesChosen 默认为 0),或者即使选择 RadioButton 后也没有输入 switch 的任何 case .

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

删除setContentView(tv1); 这用于将布局附加到 Activity 。你为什么在这里使用它?

关于java - 根据面数掷骰子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42114693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com