You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:跨Activity传值计算阶乘时遇崩溃求助

问题解决:Android阶乘计算程序崩溃

错误原因分析

报错信息里的Resources$NotFoundException: String resource ID #0x6是核心问题:

  • TextView.setText(int)方法误用:TextView.setText()有两个重载方法,当传入int参数时,系统会把它当作字符串资源的ID去查找,而不是直接显示数字。你传入的阶乘结果是int类型,导致系统找不到对应ID的资源,引发崩溃。
  • 阶乘计算逻辑错误:循环中直接修改了变量x(初始是输入的数值),导致循环条件i<x不断变化,会出现无限循环或者计算结果溢出的问题。

代码修正方案

1. MainActivity.java(增加输入合法性判断)

原代码未处理输入为空或非数字的情况,补充判断避免额外崩溃:

package com.example.practical6;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    EditText e1;
    Button b;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        e1=findViewById(R.id.editTextTextPersonName);
        b=findViewById(R.id.button);
        b.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        String input = e1.getText().toString().trim();
        if(input.isEmpty()){
            Toast.makeText(this, "请输入数值", Toast.LENGTH_SHORT).show();
            return;
        }
        try {
            Integer number= Integer.valueOf(input);
            Intent i=new Intent(MainActivity.this, MainActivity2.class);
            i.putExtra("user",number);
            startActivity(i);
        } catch (NumberFormatException e) {
            Toast.makeText(this, "请输入有效整数", Toast.LENGTH_SHORT).show();
        }
    }
}

2. MainActivity2.java(核心逻辑修正)

修正setText调用方式,同时修复阶乘计算逻辑:

package com.example.practical6;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity2 extends AppCompatActivity {
   TextView t;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        t=findViewById(R.id.textView2);
        Intent i2 = getIntent();
        int inputNumber= i2.getIntExtra("user",0);
        
        // 计算阶乘,用long避免整数溢出
        long factorial = 1;
        if(inputNumber >= 0){
            for(int i=1; i<=inputNumber; i++){
                factorial *= i;
            }
        } else {
            t.setText("负数没有阶乘");
            return;
        }
        
        // 将数值转为字符串后设置给TextView
        t.setText(String.format("%d的阶乘是:%d", inputNumber, factorial));
    }
}

关键修改点说明

  • TextView.setText():使用String.format()或String.valueOf()将数值转为字符串,避免系统把int当成资源ID。
  • 阶乘计算:
    • 用long类型存储结果,避免int类型的溢出(输入12以上的int阶乘就会溢出)。
    • 循环条件改为i<=inputNumber,用单独变量factorial存储计算结果,不修改输入数值,保证循环逻辑正确。
    • 增加负数判断,给出友好提示。

内容的提问来源于stack exchange,提问作者Sneha Nadapara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 11:25:43