答案总是0

时间:2013-10-21 13:29:10

标签: java

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.我也尝试了很多不同的输入值但结果保持不变。我确信公式中没有问题。请帮帮我out.Thanks提前。

5 个答案:

答案 0 :(得分:9)

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

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

应该是:

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

另外,正如其他人所指出的那样,算术完全在整数数学中执行。如果你真的想要一个整数结果,那就无所谓了(例如,如果你不想在pn和{r时{0} {1}}都是10) - 但如果你想得到非整数结果,你可能需要这样的东西:

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

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

答案 1 :(得分: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=...

即可

答案 2 :(得分:2)

如果产品p*n*r小于100,则将其除以100将截断为0,因为您将其转换为int。将其更改为double并改为100.0

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

答案 3 :(得分:2)

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

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

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

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

答案 4 :(得分:1)

编辑计算方法,

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