当我的应用程序到达java代码的某个部分时,就会停止

当我的应用程序到达java代码的某个部分时,就会停止,java,android,Java,Android,我希望你今天过得愉快, 我已经开始开发android应用程序,我做了大量的研究和调试,最后,我得到了导致我的应用程序停止在android Studio上的一行代码,以下是完整的代码 package com.example.numbershapesapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.

我希望你今天过得愉快, 我已经开始开发android应用程序,我做了大量的研究和调试,最后,我得到了导致我的应用程序停止在android Studio上的一行代码,以下是完整的代码

package com.example.numbershapesapp;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
class Number {
    int user_number;

    public int isTriangle(int user_number) {
        int i = 0, sum = 0,c=0;
        while (true) {
            sum += i;
            if (sum == user_number) {
                ++c;
                break;
            }
            if(sum > user_number){
                break;
            }
            i++;
        }
        if(c>0)
            return 1;
        else
            return 0;
    }

    public int isSquare(int user_number) {
        int i = 1,c=0,sq=0;
        while (true) {
            sq = i*i;
            if (sq == user_number) {
                c++;
                break;
            }
            i++;
        }
        if(c>0)
            return 1;
        else
            return 0;

    }
}

    public void function(View view) {
       EditText number = (EditText) findViewById(R.id.user_number);
        Number myNum = new Number();
         myNum.user_number = Integer.parseInt(number.getText().toString());
         int num = myNum.user_number;
       if(myNum.isTriangle(num) == 1){
           Toast.makeText(MainActivity.this,"The number "+num+" is Triangular.",Toast.LENGTH_LONG).show();
       }else if(myNum.isSquare(num) == 1){
           Toast.makeText(MainActivity.this ,"The number "+num+" is Square.",Toast.LENGTH_LONG).show();
       }
       else
           {
          // Toast.makeText(MainActivity.this,"The number "+num+" is neither Triangular nor Square",Toast.LENGTH_LONG).show();
           Log.i("TEXT","no t no s");
       }
//       Log.i("done","DONE");
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
在函数中,函数(视图)除else语句外,所有语句都有效。 当我的代码必须执行else部分时,我的应用程序崩溃。你能帮我吗

同样,这里是导致此问题的特定代码段

      else
           {
          // Toast.makeText(MainActivity.this,"The number "+num+" is neither Triangular nor Square",Toast.LENGTH_LONG).show();
           Log.i("TEXT","no t no s");
       }

谢谢。

如果
user\u number
不是一个完美的正方形,这是一个无限循环

        while (true) {
            sq = i*i;
            if (sq == user_number) {
                c++;
                break;
            }
            i++;
        }
您可以通过添加检查三角形数字时的类似检查来解决此问题:

            if(sq > user_number){
                break;
            }
但更好的解决方案可能是用一点数学知识来代替循环

double root = Math.sqrt(user_number);
if (root == (int) root) {
   // user_number is square
}

这两种方法似乎都不起作用,不幸的是,当触发else条件时,应用程序仍然关闭,对不起,先生,但还有其他选择吗?您能否更详细地描述崩溃:您是否收到“应用程序未响应”对话框或“应用程序已停止”对话框?什么会被打印到logcat?是的,先生,它说“应用程序没有响应”,并将堆栈跟踪写到“/data/anr/traces.txt”中。logcat上打印了“/data/anr/traces.txt”中的是什么?对不起,先生,我不清楚你的问题,但我在此回答我的推断。不,这段代码的java文件位于:C:\Users\shivansh\AndroidStudioProjects\NumberShapeApp\app\src\main\java\com\example\NumberShapeApp\MainActivity.java“应用程序无响应”表明仍然存在无限循环。你输入的数字是多少?