当前位置:编程学习 > JAVA >>

求教,java语法bug吗?if else 计算利息


package suanfa;

import java.util.Scanner;

public class H55 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入这个月的收入:");
double i=sc.nextDouble();
double a1,a2,a4,a6,a10,a11=0;
a1=100000*0.1d;    //10w
a2=a1+100000*0.075d; //20w
a4=a2+200000*0.05;  //40w
a6=a4+200000*0.03;  //60w
a10=a6+400000*0.015;     //100w
if(i<=100000)
a11=i*0.1d;
else if(i>100000&&i<=200000)
a11=a1+(i-100000)*0.075d;
else if(i>200000&&i<=400000)
a11=a2+(i-200000)*0.05d;
else if(i>400000&&i<=600000)
a11=a4+(i-400000)*0.03d;
else if(i>600000&&i<=10000000)
a11=a6+(i-600000)*0.015d;
else if(i>1000000)
a11=a10+(i-1000000)*0.01d;
System.out.println(a11);

}


}



我笨死了.怎么也找不到错误,但错误真的在这里面.
当传入的数字大于100w时就会计算出错.
按照这样计算  当传入的数是100w时,输出:39500.0   那口算一下当传入  110w时,应该是40500才对.
可是运行一下就发现输入时41000.
我这样写有什么错误吗?
100w一下都是正确的.难道是字符转换成String类型输出时出的错误吗?
那为什么100w以内没有错那?


到底是哪里的问题,我晕了....... --------------------编程问答-------------------- 终于找到了....else if  在java里有嵌套次数...超过四次就会出现错误!!!!!!! --------------------编程问答-------------------- 。。。真还没有遇到过 我刚才还在想呢
最后一个if中就算是空的 也能输出a11的值  --------------------编程问答--------------------
引用 1 楼 f2m4s 的回复:
终于找到了....else if  在java里有嵌套次数...超过四次就会出现错误!!!!!!!

不是吧,还有这样的说法吗? --------------------编程问答--------------------
引用 2 楼 serbry0033 的回复:
。。。真还没有遇到过 我刚才还在想呢
最后一个if中就算是空的 也能输出a11的值

其实你看看楼主的代码就知道了,下面是我复制出来的两个值,你看看,就明白了:
10000000
1000000
--------------------编程问答--------------------
引用楼主 f2m4s 的回复:
Java code

package suanfa;

import java.util.Scanner;

public class H55 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(Syste……

楼主注意看看你最后两个else if的值,下面是我复制出来的,你看后应该会明白错误是怎么回事了:
10000000
1000000 --------------------编程问答-------------------- 次问题相当的严峻.... 


if(i<=100000)
            a11=i*0.1d;
        else if(i>100000&&i<=200000)
            a11=a1+(i-100000)*0.075d;
        else if(i>200000&&i<=400000)
            a11=a2+(i-200000)*0.05d;
        else if(i>400000&&i<=600000)
            a11=a4+(i-400000)*0.03d;
        else if(i>600000&&i<=10000000)
            a11=a6+(i-600000)*0.015d;  //此句会影下下面的结果.不信你试试.改成*0.01,输出100w的结果
        else if(i>1000000)              //若是在此处的else处插入一对 {}  ,就能正确了.
            a11=a10+(i-1000000)*0.01d;
        System.out.println(a11);




求解?!?!!?!?!??! --------------------编程问答--------------------
引用 4 楼 hudie1234567 的回复:
引用 2 楼 serbry0033 的回复:

。。。真还没有遇到过 我刚才还在想呢
最后一个if中就算是空的 也能输出a11的值

其实你看看楼主的代码就知道了,下面是我复制出来的两个值,你看看,就明白了:
10000000
1000000


是你复制错了吧...
else if(i> 1000000)
a11=a10+(i-1000000)*0.01d;
--------------------编程问答--------------------
引用 7 楼 f2m4s 的回复:
引用 4 楼 hudie1234567 的回复:

引用 2 楼 serbry0033 的回复:

。。。真还没有遇到过 我刚才还在想呢
最后一个if中就算是空的 也能输出a11的值

其实你看看楼主的代码就知道了,下面是我复制出来的两个值,你看看,就明白了:
10000000
1000000


是你复制错了吧...
else if(i> 1000000)
a11=……

我没复制错啊。
   else if(i>600000&&i<=10000000)
            a11=a6+(i-600000)*0.015d;
        else if(i>1000000)
            a11=a10+(i-1000000)*0.01d;
        System.out.println(a11);
看两种颜色标记的地方。 --------------------编程问答-------------------- 最后一个else if条件中判断i大于10000000,就可以了啊。
else if(i>10000000) --------------------编程问答-------------------- 如果最后两个if颠倒位置 也是可以正常输出的
再看看 我也试了 我后来改了很多次 尝试不同输出 和复制没有太大关系 --------------------编程问答-------------------- 果然.....饶了一大圈..谢谢楼上的 --------------------编程问答-------------------- 晕哦 确实看错了 没有注意看哪个条件
确实哪个条件没有是1000w 

看着茫茫的大海 眼睛就是亮啊  --------------------编程问答-------------------- --------------------编程问答-------------------- else if(i>600000&&i<=10000000)//这里判断的是i大于60万并且i小于等于1000万
    a11=a6+(i-600000)*0.015d;
else if(i>1000000)
    a11=a10+(i-1000000)*0.01d;//这里又判断i大于100万
要是这样写的话,如果i的值大于100万并且小于1000万的话,最后两个else if语句都会执行。
刚才看楼主应该是笔误,在else if(i>600000&&i<=10000000)多写了个0. --------------------编程问答--------------------
引用 12 楼 serbry0033 的回复:
晕哦 确实看错了 没有注意看哪个条件
确实哪个条件没有是1000w 

看着茫茫的大海 眼睛就是亮啊

呵呵,过奖了。 --------------------编程问答-------------------- 编写程序要认真.能复制的地方要复制.不然出了错,看半天都看不出来.谢谢3楼..... --------------------编程问答--------------------
引用 16 楼 f2m4s 的回复:
编写程序要认真.能复制的地方要复制.不然出了错,看半天都看不出来.谢谢3楼.....

呵呵,说的好啊,就是要细心些。 --------------------编程问答-------------------- 在问一个问题....
就是我要是写成方法.
你看

static double f(long i){
double a1,a2,a4,a6,a10,a11=0;
a1=100000*0.1d;    //10w
a2=a1+100000*0.075d; //20w
a4=a2+200000*0.05;  //40w
a6=a4+200000*0.03;  //60w
a10=a6+400000*0.015;     //100w
if(i<=100000)
return i*0.1d;
else if(i>100000&&i<=200000)
return a1+(i-100000)*0.075d;
else if(i>200000&&i<=400000)
return a2+(i-200000)*0.05d;
else if(i>400000&&i<=600000)
return a4+(i-400000)*0.03d;
else if(i>600000&&i<=1000000)
return a6+(i-600000)*0.015d;
else if(i>1000000)
return a10+(i-1000000)*0.01;
    return a11;   //为什么最后它非要我加个return,不然eclipse提示出错。我这样加可以吗?还有什么好办法?
}
--------------------编程问答--------------------
引用 18 楼 f2m4s 的回复:
在问一个问题....
就是我要是写成方法.
你看
Java code

static double f(long i){
    double a1,a2,a4,a6,a10,a11=0;
    a1=100000*0.1d;    //10w
    a2=a1+100000*0.075d; //20w
    a4=a2+200000*0.05;  //40w
    a6=a4+……

根据你的意思,最后一个else if可以直接写成else --------------------编程问答--------------------
引用 18 楼 f2m4s 的回复:
在问一个问题....
就是我要是写成方法.
你看
Java code

static double f(long i){
    double a1,a2,a4,a6,a10,a11=0;
    a1=100000*0.1d;    //10w
    a2=a1+100000*0.075d; //20w
    a4=a2+200000*0.05;  //40w
    a6=a4+……

你的最后一个else if判断了上面判断情况外的所有情况,所以可以直接写成else。 --------------------编程问答-------------------- 果然是这样。这就不提示在加return了。。。。万分感谢。
看来我需要学的还有很多。再次感谢。 --------------------编程问答--------------------
引用 21 楼 f2m4s 的回复:
果然是这样。这就不提示在加return了。。。。万分感谢。
看来我需要学的还有很多。再次感谢。

呵呵,好好学。。。 --------------------编程问答-------------------- 好囧。。 --------------------编程问答--------------------
引用 23 楼 leehomwong 的回复:
好囧。。
--------------------编程问答-------------------- 楼主加油哦 这样的问题单步跟踪就应该能发现。初学者最重要的就是要会使用断点调试。 --------------------编程问答--------------------
引用 22 楼 hudie1234567 的回复:
引用 21 楼 f2m4s 的回复:

果然是这样。这就不提示在加return了。。。。万分感谢。
看来我需要学的还有很多。再次感谢。

呵呵,好好学。。。

哥们 给力呀  --------------------编程问答--------------------   对于这种类型的错
  不要轻易怀疑语言本身  --------------------编程问答-------------------- 看到这个标题就知道是个弱智问题了。所有怀疑语言怀疑编译器的帖子最终都证明了这一点。 --------------------编程问答-------------------- debug下不久行了么~~ --------------------编程问答-------------------- 同意楼上的  DEBUG跟踪下 就知道哪里有问题了 --------------------编程问答-------------------- 学习一下。。。。希望能学到更多的东西。。。。 --------------------编程问答-------------------- 新手有质疑态度是值得肯定的,不过光大胆还是不够的,更重要的是需要心细,lz加油 --------------------编程问答-------------------- 好像double类型有精度问题,试试BigDecimal吧 --------------------编程问答-------------------- 之所以要加return语句是因为可能所有的条件都不满足,这时就没有返回值了,所以编译时会提示你错误
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,