2

嘿伙计们,我知道有很多用于数字阶乘的 Java 程序......但我面临着 android 的问题。以下是我的代码....谢谢

package com.droidacid.apticalc.aptitudes;

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

import com.droidacid.apticalc.R;

public class AptiFactorial extends Activity implements android.view.View.OnClickListener{
EditText number;
TextView answer;
Button calculate;

long factorial = 1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.apti_factorial);
    initialize();
    calcFactorial();
}
private void initialize() {
    number = (EditText) findViewById(R.id.et_apti_number);
    answer = (TextView) findViewById(R.id.tv_apti_answer);
    calculate = (Button) findViewById(R.id.b_apti_calc);
    calculate.setOnClickListener(this);
}
private void calcFactorial() {
    if (number.getText().toString().equals("")) number.setText("0");
    int num = Integer.parseInt(number.getText().toString());
    for(int i = 1; i<=num; i++){
        factorial = i * factorial;
    }

}


@Override
public void onClick(View v) {
    calcFactorial();
    answer.setText("Factorial of " + number.getText().toString() + " is : " +     factorial);

}

}

这是我的代码,我需要知道设置提示而不是 0 的方法,但是如果我删除if (number.getText().toString().equals("")) number.setText("0");

然后得到 NullPointerException... 同样在第一次正确计算但如果我再次计算然后得到错误的答案。我认为一些循环问题,因为我直接使用阶乘的值。

请帮忙谢谢

4

5 回答 5

1

忘记所有这些equal东西,涵盖所有基础并像这样进行操作:

package com.droidacid.apticalc.aptitudes;

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

import com.droidacid.apticalc.R;

public class AptiFactorial extends Activity implements android.view.View.OnClickListener{
EditText number;
TextView answer;
Button calculate;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.apti_factorial);
    initialize();
}

private void initialize() {
    number = (EditText) findViewById(R.id.et_apti_number);
    number.setHint("Enter number to be factorialized :P")
    answer = (TextView) findViewById(R.id.tv_apti_answer);
    calculate = (Button) findViewById(R.id.b_apti_calc);
    calculate.setOnClickListener(this);
}

private long calcFactorial() {

    long factorial = 1;
    try {
        factorial = Long.parseLong(number.getText().toString());
        for(int i=factorial-1; i>0; i--){
            factorial = i * factorial;
        }
    } catch (NumberFormatException e) {
        Toast.makeText(this, "Incorrect Input", Toast.LENGTH_LONG).show();
    } finally {}

    return factorial;
}

@Override
public void onClick(View v) {
    answer.setText("Factorial of " + number.getText().toString() + " is : " + calcFactorial());
}
于 2013-06-22T10:06:07.860 回答
0

做类似的事情。

private void calcFactorial() {
    int num = 0;
    if (!number.getText().toString().equals(""))
          num = Integer.parseInt(number.getText().toString());
    for(int i = 1; i<=num; i++){
        factorial = i * factorial;
    }

}
于 2013-06-22T09:54:03.740 回答
0
 Rather than using
(number.getText().toString().equals("")) number.setText("0");
Use
(number.getText().length==0) number.setText("0");
于 2013-06-22T09:57:29.653 回答
0
** first go its calculating correctly but If I calculate again then getting wrong answer**

试试这样

 private void calcFactorial() {
    factorial = 1;///Check out the line..
        int num = 0;
        if (!number.getText().toString().equals(""))
              num = Integer.parseInt(number.getText().toString());
        for(int i = 1; i<=num; i++){
            factorial = i * factorial;
        }

    }

您需要确保变量阶乘重新初始化为 1 .. 以获得下一个数字的阶乘..

于 2013-06-22T10:25:08.097 回答
0
private void fact_isClicked(View view) {
        
        if(textField.length()>0){
        int ifac = Integer.parseInt(textField.getText().toString());
        int fact = factorial(ifac);
        
        tvsec.setText(String.valueOf(fact));
        textField.setText(ifac+"!");
        
    }}
于 2021-03-24T22:14:05.423 回答