Do While Issue:即使满足条件,程序也不会停止

时间:2015-04-25 12:23:10

标签: java do-while bluej

  

此计划旨在找出复利和简单兴趣之间的差异。

当我输入时间为0(零)且代码至少运行一次时,此代码应该终止。当我编译代码时,编译器说:

  

编译类 - 没有语法错误

但是当我运行代码时,第二个条件"至少运行一次"已经完成并且每件事情都运行良好但是在接受了值之后,如果时间输入为 0 (零)则不会停止 (根据它应该标题),它给了我错误的答案。

示例

p=3000
r=10
t=2

对于上面的值,输出应该是30.0,但是当我运行程序时,它会将输出视为-600.0(一个新的和一个错误的差异)。

import java.io.*;
class p6
 {
  InputStreamReader i1 =new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(i1);  
// calculating the CI and SI
public void calc()throws IOException
{   int p,t,r,si;double a, ci;char k;
    do
    {
      // getting principle
      System.out.println("Enter Principle in decimal:");           
      p = Integer.parseInt(br.readLine());
      // getting Rate
      System.out.println("Enter Rate in decimal    :"); 
      t = Integer.parseInt(br.readLine());
      // getting Time
      System.out.println("Enter Time               :"); 
      r = Integer.parseInt(br.readLine());
      //calculating SI
      si = (p*t*r)/100;
      // calculating amount
      a = (double)p*(Math.pow((1+r/100),t));  
      // calculating CI
      ci = a - p;
      // printing Difference
      System.out.println("Difference between CI and SI = "+(ci-si)); 

     }while(t!=0);//end of DOWhile
  }// end of calc
}//end of p6

我使用BlueJ编写并运行我的代码。

我是一名初学者,一年前刚刚开始学习java。

请尽早帮我解决这个问题。

任何帮助表示赞赏,

阿努拉格。

5 个答案:

答案 0 :(得分:1)

你正在使用你应该使用双打的整数。

ptrsi是整数。

所以(1+r)/100就是11/100(你说r10)。结果,因为这是整数除法,。因此,你将零提高到任何能力。它仍然是零。

从零减去校长,你得到一个负数。

如果您的变量被声明为double,那么您可能会得到一个非零结果(0.11),您可以将您的主体乘以。

答案 1 :(得分:0)

你在你的程序中调用时间r并且评价t,不是交换了吗?

不应该是

System.out.println("Enter Rate in decimal    :"); 
r = Integer.parseInt(br.readLine());
// getting Time
System.out.println("Enter Time               :"); 
t = Integer.parseInt(br.readLine());

答案 2 :(得分:0)

尝试使用Scanner类。替换

InputStreamReader i1 =new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(i1);  

通过     扫描仪扫描=新扫描仪(System.in);

此外,

si = (p*t*r)/100;

这就是你的问题所在。 p,t和r是整数,因此该操作将为您提供错误的值。这可以通过将整数的类型更改为float或double,或通过转换

来解决
si = ((double) (p*t*r))/100;

另外,循环将继续执行内部的所有行,即使您要提供0。要解决此问题,请将此语句放在t值之后:

if(t==0)
  break;

答案 3 :(得分:0)

而不是检查与利息计算相关的变量。对于利息计算,不仅T偶P或R不应为0,因此请检查SI!= 0而不是检查t!= 0。如上所述,将0与任何给定0相乘,而不考虑任何其他值。它避免了多个值的变量检查

答案 4 :(得分:0)

试试这个:

import java.io.*;
class p6
 {
  InputStreamReader i1 =new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(i1);  
// calculating the CI and SI
public void calc()throws IOException
{   double p,t,r, a, si, ci;char k;//Changed all to double.
    do
    {
      // getting principle
      System.out.println("Enter Principle in decimal:");           
      p = Double.parseDouble(br.readLine());// changed to Double.parseDouble to store double value.
      // getting Rate
      System.out.println("Enter Rate in decimal    :"); 
      r = Double.parseDouble(br.readLine());// changed to Double.parseDouble to store double value.
      // getting Time
      System.out.println("Enter Time               :"); 
      t = Double.parseDouble(br.readLine());// changed to Double.parseDouble to store double value.
      //calculating SI
      si = (p*t*r)/100;
      // calculating amount
      a = (double)p*(Math.pow((1+r/100),t));  
      // calculating CI
      ci = a - p;
      // printing Difference
      System.out.println("Difference between CI and SI = "+(ci-si)); 

     }while(t!=0);//end of DOWhile
  }// end of calc
}//end of p6