求教,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的值 --------------------编程问答--------------------
不是吧,还有这样的说法吗? --------------------编程问答--------------------
其实你看看楼主的代码就知道了,下面是我复制出来的两个值,你看看,就明白了:
10000000
1000000
--------------------编程问答--------------------
楼主注意看看你最后两个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);
求解?!?!!?!?!??! --------------------编程问答--------------------
是你复制错了吧...
else if(i> 1000000)
a11=a10+(i-1000000)*0.01d;
--------------------编程问答--------------------
我没复制错啊。
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. --------------------编程问答--------------------
呵呵,过奖了。 --------------------编程问答-------------------- 编写程序要认真.能复制的地方要复制.不然出了错,看半天都看不出来.谢谢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提示出错。我这样加可以吗?还有什么好办法?
}
根据你的意思,最后一个else if可以直接写成else --------------------编程问答--------------------
你的最后一个else if判断了上面判断情况外的所有情况,所以可以直接写成else。 --------------------编程问答-------------------- 果然是这样。这就不提示在加return了。。。。万分感谢。
看来我需要学的还有很多。再次感谢。 --------------------编程问答--------------------
呵呵,好好学。。。 --------------------编程问答-------------------- 好囧。。 --------------------编程问答-------------------- --------------------编程问答-------------------- 楼主加油哦 这样的问题单步跟踪就应该能发现。初学者最重要的就是要会使用断点调试。 --------------------编程问答--------------------
哥们 给力呀 --------------------编程问答-------------------- 对于这种类型的错
不要轻易怀疑语言本身 --------------------编程问答-------------------- 看到这个标题就知道是个弱智问题了。所有怀疑语言怀疑编译器的帖子最终都证明了这一点。 --------------------编程问答-------------------- debug下不久行了么~~ --------------------编程问答-------------------- 同意楼上的 DEBUG跟踪下 就知道哪里有问题了 --------------------编程问答-------------------- 学习一下。。。。希望能学到更多的东西。。。。 --------------------编程问答-------------------- 新手有质疑态度是值得肯定的,不过光大胆还是不够的,更重要的是需要心细,lz加油 --------------------编程问答-------------------- 好像double类型有精度问题,试试BigDecimal吧 --------------------编程问答-------------------- 之所以要加return语句是因为可能所有的条件都不满足,这时就没有返回值了,所以编译时会提示你错误
补充:Java , Java SE