不幸的是你已经停止了工作

时间:2016-08-28 08:10:36

标签: android

我正试图在android中制作一个简单的数字猜谜游戏。当应用程序处于启动状态且用户必须猜测该数字时,会生成一个随机数。结果以长吐司的形式显示。但是,当我运行应用程序并尝试输入一个数字时,模拟器说:“不幸的是,高低游戏已停止工作”。我已经尝试重置应用程序并清除我的模拟器设置菜单中的数据,但它没有任何区别。我觉得我的java代码有问题,但到目前为止还没有弄清楚是什么问题。

这是java代码:

    package com.example.pooria.hilowgame;

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import java.util.Random;
    import android.widget.EditText;
    import android.view.View;
    import android.widget.Toast;


    public class MainActivity extends AppCompatActivity {

    int randomNum;

    public void buttonClicked(View view){
        EditText numField=(EditText) findViewById(R.id.numField);
        int numFieldVal= Integer.parseInt(numField.toString());

        String toastMessage= "";
        if(numFieldVal>randomNum){
            toastMessage= "Higher";
        }else if(numFieldVal==randomNum){
            toastMessage= "You made the right guess!!!";
        }else{
            toastMessage= "Lower";
        }
        Toast.makeText(getApplicationContext(),toastMessage,Toast.LENGTH_LONG).show();
    }


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

        Random randomGenerator= new Random();
        int randomNum= randomGenerator.nextInt(101);
    }
}

和xml代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.pooria.hilowgame.MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Guess the random number"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="48dp"
        android:gravity="center_horizontal" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Guess!!!"
        android:id="@+id/button"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:onClick="buttonClicked" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/numField"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="34dp" />
</RelativeLayout>

Thanks

1 个答案:

答案 0 :(得分:0)

package com.example.pooria.hilowgame;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.util.Random;
import android.widget.EditText;
import android.view.View;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {

int randomNum; <--------

public void buttonClicked(View view){
    EditText numField=(EditText) findViewById(R.id.numField);
    int numFieldVal= Integer.parseInt(numField.getText().toString()); <-------

    String toastMessage= "";
    if(numFieldVal>randomNum){
        toastMessage= "Higher";
    }else if(numFieldVal==randomNum){
        toastMessage= "You made the right guess!!!";
    }else{
        toastMessage= "Lower";
    }
    Toast.makeText(getApplicationContext(),toastMessage,Toast.LENGTH_LONG).show();
}


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

    Random randomGenerator= new Random();
    randomNum = randomGenerator.nextInt(101); <--------
}
}

查看标记的行。代码更改为正确,但我添加了文本来解释错误。

更改

int numFieldVal= Integer.parseInt(numField.toString());

int numFieldVal= Integer.parseInt(numField.getText().toString());

未更改的行是导致崩溃的原因。

与游戏相关的问题:

这一行:

int randomNum = randomGenerator.nextInt(101);

错了。您创建一个新的局部变量,意味着全局randomNum为0 - 始终。解决方案很简单 - 删除int,因此它引用了主要的randomNum变量。

通过这样做,您已经解决了不需要的结果并解决了崩溃问题。