使用toString()

时间:2019-02-22 12:12:38

标签: java android

我正在开发一个简单的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播放器使用不正确?

5 个答案:

答案 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函数之间发生冲突。

您可以尝试:

  1. 重命名您的函数(尝试Object.toString()
  2. 使用playerAsString()this调用该函数,以确保您从类中调用该函数。