0
import java.io.*;

class empl
{

    int p, n, r, i;

    void accept()
    {
        try
        {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("Enter Principal amount");
            int p = Integer.parseInt(br.readLine());
            System.out.println("Enter no of years");
            int n = Integer.parseInt(br.readLine());
            System.out.println("Enter rate");
            int r = Integer.parseInt(br.readLine());
        } catch(Exception e)
        {
            System.out.println("" + e);
        }
    }

    int calculate()
    {
        i = (p * n * r) / 100;
        return (i);
    }
}

class bank
{
    public static void main(String args[])
    {
        empl e = new empl();
        e.accept();
        int a = e.calculate();
        System.out.println("i=" + a);
    }
}

我是java初学者。上面的程序总是给我结果为0。我也尝试了许多不同的输入值,但结果保持不变。我确信公式没有问题。请帮帮我。谢谢提前。

4

5 回答 5

9

您的accept方法为 , 和 - 它声明了新的局部变量pn并且r- 它没有为实例变量赋值,实例变量的值仍然为 0。您应该只为实例变量赋值,而不是声明局部变量。例如,这一行:

int p = Integer.parseInt(br.readLine());

应该:

p = Integer.parseInt(br.readLine());

此外,正如其他人所指出的那样,算术完全是在整数数学中执行的。如果您真的想要一个整数结果(例如,如果您不介意在和都是 10 时得到 0) p,这并不重要- 但如果您希望能够获得非整数结果,您可能想要就像是:nr

double calculate() {
    return (p * n * r) / 100.0; 
}

...或者BigDecimal如果确切的数字值对您很重要,也可以使用。(double适用于自然量,例如身高和体重;BigDecimal适用于财务计算。搜索有关此问题的问题doubleBigDecimal更多信息。)

于 2013-10-21T13:34:01.413 回答
2
int p=Integer.parseInt(br.readLine()); 
int n=Integer.parseInt(br.readLine()); 
int r=Integer.parseInt(br.readLine());

p, n, r 是实例变量。您不必int p再次申报。只需使用p=...

于 2013-10-21T13:34:30.833 回答
2

如果乘积p*n*r小于100,将其除以100将截断为0,因为您将其转换为int. 将其更改为 adouble并除以100.0

int calculate(){
    return (p * n * r) / 100.0;
}
于 2013-10-21T13:34:37.083 回答
2

您的问题是您正在使用整数进行计算。

i=(p*n*r)/100;

该行将乘以p,nr除以 100,然后丢弃小数点后的内容,除非p*n*r超过 100,否则为 0。

这里的解决方案是使用一些其他数据类型,例如doubleBigDecimal取决于您拥有的容错能力。

于 2013-10-21T13:34:46.350 回答
1

编辑计算方法,

double calculate() {
    return ((double)(p*n*r)/(double)100;
}
于 2013-10-21T13:36:34.983 回答