我正在开发一个简单的android骰子游戏,其中2个玩家轮流滚动,如果您获得双打,则获胜。我正在尝试使用toString来输出祝酒词,当玩家双打落地时获胜。
这是我的代码:
public class MainActivity extends AppCompatActivity {
public static final Random RANDOM = new Random();
private Button rollDice;
int player = 1;
private ImageView dice1, dice2;
TextView display;
boolean rolling = false;
@NonNull
public String toString(){
return String.valueOf(player);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rollDice = (Button) findViewById(R.id.rollDice);
dice1 = (ImageView) findViewById(R.id.dice1);
dice2 = (ImageView) findViewById(R.id.dice2);
display = (TextView) findViewById(R.id.display);
接下来是我的onclick方法和random.nextInt以及我的切换情况。
然后我在烤面包中称呼toString:
if (d1 == d2){
Context context = getApplicationContext();
String text = "Player " + toString() + " wins!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}
if (player == 1){
player = 2;
}
else{
player = 1;
}
然后输出“ Player com.ellis.newdice.MainActivity $ 1 然后随机数获胜”
我是否正确使用了toString方法,或者int播放器使用不正确?
答案 0 :(得分:1)
@media (min-width: 1405px) {
.container-fluid{
width: 1400px;
}
}
是player
,因此在这种情况下,您不需要int
方法:
toString
也请删除String text = "Player " + player + " wins!";
方法,因为默认的public String toString()
方法可能会遇到问题。...
答案 1 :(得分:0)
使用它的方式将调用活动类的toString()
方法,
这就是为什么您看到com.ellis.newdice.MainActivity$1
的原因。
您不需要toString()
即可实现所需的功能。
使用这个:
String text = "Player " + winner + " wins!";
使用在代码中为获胜玩家使用的变量(整数?)更改winner
。
答案 2 :(得分:0)
尝试以下操作:
String text = "Player " + String.valueOf(player) + " wins";
toString方法是不必要的。 String.valueOf(int number)将采用您的整数值(获胜的玩家)并将其转换为可以在Toast中显示的String。
答案 3 :(得分:0)
您似乎从中调用的对象实际上并不是您的MainActivity
,而是其中的一些匿名内部类,可能是某些侦听器。您可能需要用MainActivity.this.toString()
替换该呼叫,以明确表明要呼叫哪个toString()
。
更一般地,toString()
不是通常被显式调用的方法。当您为其他代码调用它时,它非常有用。例如,String s = "foo " + something
将在toString()
上隐式调用something
(前提是它是一个对象并且还不是String
)。
答案 4 :(得分:-1)
您不应将任何自定义函数称为import 'package:flutter/material.dart';
class Loader extends StatefulWidget {
@override
_LoaderState createState() => _LoaderState();
}
class _LoaderState extends State<Loader> with SingleTickerProviderStateMixin {
Animation _rotate;
AnimationController _controller;
@override
void initState() {
super.initState();
_controller = new AnimationController(
vsync: this,
duration: new Duration(seconds: 1),
);
_rotate = Tween(begin: 0.0, end: 3.14 * 2).animate(_controller);
_controller.forward();
}
@override
void dispose() {
super.dispose();
_controller.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
child: AnimatedBuilder(
animation: _controller,
child: Text("Flutter"),
builder: (BuildContext context, Widget _widget) {
return Transform(
transform: Matrix4.rotationY(_controller.value),
child: _widget,
);
},
),
);
}
}
,因为它是Java中超类toString()
的保留函数名。我很确定这会导致您的函数与Object
函数之间发生冲突。
您可以尝试:
Object.toString()
)playerAsString()
:this
调用该函数,以确保您从类中调用该函数。