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

Java 我的听众和吐司不合作

Java 我的听众和吐司不合作,java,android,eclipse,Java,Android,Eclipse,我一直在为一个Android应用程序任务编写这个程序,尽管Eclipse的代码没有问题,但我的手机似乎无法运行它。我是Android编程的新手,所以请容忍我 这个Android应用程序是一个简单的猜测我的数字游戏,在一个空白的活动。用户要从1-100猜,在EditText视图中输入答案,然后按下按钮提交答案。设计很好,但是要让它与OnClickListener一起工作是一件麻烦事。我一按下按钮,应用程序就会在我的GS3上崩溃。最麻烦的部分是让按钮动作,并以吐司的形式给出输出 附件是MainAct

我一直在为一个Android应用程序任务编写这个程序,尽管Eclipse的代码没有问题,但我的手机似乎无法运行它。我是Android编程的新手,所以请容忍我

这个Android应用程序是一个简单的猜测我的数字游戏,在一个空白的活动。用户要从1-100猜,在EditText视图中输入答案,然后按下按钮提交答案。设计很好,但是要让它与OnClickListener一起工作是一件麻烦事。我一按下按钮,应用程序就会在我的GS3上崩溃。最麻烦的部分是让按钮动作,并以吐司的形式给出输出

附件是MainActivity.java中的代码

我设法通过StackOverflow以及我所知道的一些Java来获取不同的代码片段。结果不完善;不过值得一试

你可以看看我的。谢谢你抽出时间,我也很感激能得到的任何帮助

package com.lookjohn.guessnumber;

import java.util.Random;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
Random random; 
Button button;
EditText text;

int input; 
int MIN = 1, MAX = 100;
int comp;
int guesses;

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    random = new Random();
    button = (Button)findViewById(R.id.button1);
    text = (EditText)findViewById(R.id.editText1);
    comp = random.nextInt(MAX - MIN + 1) + MIN;
    guesses = 0;

    button.setOnClickListener(myhandler1);
}

View.OnClickListener myhandler1 = new View.OnClickListener() {

    public void onClick(View v) {
        String value = text.getText().toString(); // Get value from input from editTextView
        input = Integer.parseInt(value); // Turn string into integer

        do{
            guesses++;
            if(input > comp)
                Toast.makeText(MainActivity.this, 
                    "Number is too big.", 
                    Toast.LENGTH_SHORT).show();
            else if (input < comp)
                Toast.makeText(MainActivity.this, 
                    "Number is too small.", 
                    Toast.LENGTH_SHORT).show();
            else
                Toast.makeText(MainActivity.this, 
                    "Good job! That was correct." +
                    "You made " + guesses + " guesses.", 
                    Toast.LENGTH_SHORT).show();
        } while(input != comp);

    }
};

编辑:我在您的代码中发现了一些其他问题。首先,EditText的输入类型是phone。应该是数字。此外,用户可以提交空白编辑文本,这将导致应用程序在调用parseInt时崩溃。我已经在下面对您的代码进行的一些更改中解决了这一问题

问题在你的循环中。按下submit后,您将进入一个无限循环。我认为您希望用户能够提交多个猜测。但是,如果用户输入了3,而您的计算值是10,那么您的循环所做的就是确定3!=十次又一次。这会导致UI冻结

删除while循环将允许Toast显示:

public void onClick(View v) {

        // If you want to implement a max number of guesses, detect the 
        // number of guesses and return from the method.
        if (guesses > 5) {
            Toast.makeText(MainActivity.this, "Out of guesses!", Toast.LENGTH_SHORT);
            return;
        }

        String value = text.getText().toString(); // Get value from input from editTextView
        // If the user submits an empty EditText, return so we don't crash when parsing int
        if (value.isEmpty()) {
            Toast.makeText(MainActivity.this, "You must enter a guess!", Toast.LENGTH_SHORT);
            return;
        }
        input = Integer.parseInt(value); // Turn string into integer
        guesses++;
        if(input > comp)
            Toast.makeText(MainActivity.this, 
                "Number is too big.", 
                Toast.LENGTH_SHORT).show();
        else if (input < comp)
            Toast.makeText(MainActivity.this, 
                "Number is too small.", 
                Toast.LENGTH_SHORT).show();
        else
            Toast.makeText(MainActivity.this, 
                "Good job! That was correct." +
                "You made " + guesses + " guesses.", 
                Toast.LENGTH_SHORT).show();

    }

您已经在click listener中为guess变量创建了无限循环,该变量始终递增且不会停止

只需删除do{…}while循环,然后重试。因为似乎不需要使用它

        if(input > comp)
            Toast.makeText(MainActivity.this, 
                "Number is too big.", 
                Toast.LENGTH_SHORT).show();
        else if (input < comp)
            Toast.makeText(MainActivity.this, 
                "Number is too small.", 
                Toast.LENGTH_SHORT).show();
        else
            Toast.makeText(MainActivity.this, 
                "Good job! That was correct." +
                "You made " + guesses + " guesses.", 
                Toast.LENGTH_SHORT).show();

请同时发布日志,其中出现异常:为什么在这里使用循环?只需删除循环,并添加@Override注释,你应该会很好。嘿,约翰,你看到我的答案了吗。不,鲁兹:哇,所以在这种情况下不允许使用循环?我真的认为它们可以使用。非常感谢你的解释和代码修改,迈克!
        if(input > comp)
            Toast.makeText(MainActivity.this, 
                "Number is too big.", 
                Toast.LENGTH_SHORT).show();
        else if (input < comp)
            Toast.makeText(MainActivity.this, 
                "Number is too small.", 
                Toast.LENGTH_SHORT).show();
        else
            Toast.makeText(MainActivity.this, 
                "Good job! That was correct." +
                "You made " + guesses + " guesses.", 
                Toast.LENGTH_SHORT).show();