Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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_Android Edittext_Android Textwatcher - Fatal编程技术网

Java 如果存在';在多个文本中输入?

Java 如果存在';在多个文本中输入?,java,android,android-edittext,android-textwatcher,Java,Android,Android Edittext,Android Textwatcher,我试图编写一个android程序,它显示两个不同EditText字段中指定的两个整数的最大公约数。首先,我用button完成了这项工作,一切正常(您可以在下面的代码中看到onclick listener被注释掉了)。现在我想这样做:当两个编辑文本都不为空时,应用程序检查,然后自动开始计算并显示gcd。但当我开始在任何EditText字段中键入时,应用程序崩溃。我还尝试只在其中一个EditText上添加TextChangeListener。一切都很好,直到我删除其中一个字段的所有输入,然后应用程序

我试图编写一个android程序,它显示两个不同EditText字段中指定的两个整数的最大公约数。首先,我用button完成了这项工作,一切正常(您可以在下面的代码中看到onclick listener被注释掉了)。现在我想这样做:当两个编辑文本都不为空时,应用程序检查,然后自动开始计算并显示gcd。但当我开始在任何EditText字段中键入时,应用程序崩溃。我还尝试只在其中一个EditText上添加TextChangeListener。一切都很好,直到我删除其中一个字段的所有输入,然后应用程序再次崩溃。我才刚刚开始了解安卓的发展,制作这个应用主要是通过修改互联网上的例子,所以可能我做错了什么。。。有人能帮我吗?谢谢

MainActivity.java

    public class MainActivity extends Activity 

{
    EditText a;
    EditText b;
    TextView gcdResult;
    Button calculateGcd;
    int a, b, gcdValue

    TextWatcher textWatcher = new TextWatcher(){
        @Override
        public void afterTextChanged(Editable s){}

        @Override
        public void beforeTextChanged(CharSequence s,int start, int count, int after){}

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count){

            AutoCalculateGcd();

        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {


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

        a = (EditText)findViewById(R.id.aText1);
        b = (EditText)findViewById(R.id.bText1);
        gcdResult = (TextView)findViewById(R.id.resultTextView1);
        calculateGcd = (Button)findViewById(R.id.calcButton1);

        /* calculateGcd.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                AutoCalculateRatio();
            }
        });*/

        a.addTextChangedListener(textWatcher);
        b.addTextChangedListener(textWatcher);

    }



    //Euclidean alghorithm to find gcd
    public static int gcd(int a, int b) {
        if (b == 0) return w;
        else return gcd(b a % b);

        }
    public static boolean isInputNotEmpty(EditText a, EditText b){
        String a = a.getText().toString();
        String b = b.getText().toString();
        if(a.equals("") && b.equals("") ){
             return false;
    }
    else{
        return true;
    }

    }
    public void AutoCalculateGcd(){
        if(isInputNotEmpty(a, b)){
            a = Integer.parseInt(width.getText().toString());
            b = Integer.parseInt(height.getText().toString());
            gcdValue = gcd(a, b);
            ratioResult.setText(Integer.toString(gcdValue));
        }
        else{
            //Toast.makeText(this, "No input", Toast.LENGTH_SHORT).show();
        }
    }
}

如果您发布stacktrace可能会有所帮助,但我猜您从
Integer.parseInt()
调用中得到了NumberFormatException。一种方法是采取如下措施:

try {
        a = Integer.parseInt(width.getText().toString());
        b = Integer.parseInt(height.getText().toString());
        gcdValue = gcd(a, b);
        ratioResult.setText(Integer.toString(gcdValue));
} catch ( NumberFormatException e) {
        ratioResult.setText("N/A")
} 

如果您发布stacktrace可能会有所帮助,但我猜您从
Integer.parseInt()
调用中得到了NumberFormatException。一种方法是采取如下措施:

try {
        a = Integer.parseInt(width.getText().toString());
        b = Integer.parseInt(height.getText().toString());
        gcdValue = gcd(a, b);
        ratioResult.setText(Integer.toString(gcdValue));
} catch ( NumberFormatException e) {
        ratioResult.setText("N/A")
} 

事实上,你应该更换

public static boolean isInputNotEmpty(EditText a, EditText b) {
    String a = a.getText().toString();
    String b = b.getText().toString();
    if (a.equals("") && b.equals("")) {
         return false;
    }
    else {
        return true;
    }
}

甚至

public static boolean isInputNotEmpty(EditText a, EditText b) {
    return !(a.getText().toString().isEmpty() || b.getText().toString().isEmpty());
}

因为您想知道其中是否有(|)是空的,而不是两个(&&)都是空的。

实际上,您应该替换

public static boolean isInputNotEmpty(EditText a, EditText b) {
    String a = a.getText().toString();
    String b = b.getText().toString();
    if (a.equals("") && b.equals("")) {
         return false;
    }
    else {
        return true;
    }
}

甚至

public static boolean isInputNotEmpty(EditText a, EditText b) {
    return !(a.getText().toString().isEmpty() || b.getText().toString().isEmpty());
}

因为您想知道其中是否有(|)是空的,而不是两个(&&)都是空的。

这是编译吗?您有重复的变量名-
EditText a,int a,EditText b,int b
这无法编译,我们无法为您编写程序。我很乐意帮你解决一个问题,但是构建你的应用程序。。。不,谢谢。@mihail,对不起。这可能很奇怪,但问题是我在度假回家的时候写了这个问题,我用内存写了源代码。我想回家后有个解决办法。我记住了代码的所有要点,并试图重新构建它,我可以看到我遗漏了一些东西……这甚至可以编译吗?您有重复的变量名-
EditText a,int a,EditText b,int b
这无法编译,我们无法为您编写程序。我很乐意帮你解决一个问题,但是构建你的应用程序。。。不,谢谢。@mihail,对不起。这可能很奇怪,但问题是我在度假回家的时候写了这个问题,我用内存写了源代码。我想回家后有个解决办法。我记住了代码的所有要点,并试图重建它,我可以看到我遗漏了一些东西。。。