当我的应用程序到达java代码的某个部分时,就会停止
我希望你今天过得愉快, 我已经开始开发android应用程序,我做了大量的研究和调试,最后,我得到了导致我的应用程序停止在android Studio上的一行代码,以下是完整的代码当我的应用程序到达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.
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“应用程序无响应”表明仍然存在无限循环。你输入的数字是多少?