我哪里错了?

kshaoye 2009-10-08 08:17:02
题目:
编写一个整钱兑零程序,该程序能够将用double类型表达的钱数兑换成相应的硬币,要求精确到分。(硬币的面值有1元、5角、1角、5分、2分、1分,如果输入:12.53,结果应该为:12(1元),1(5角),1(2分),1(1分))。


我写的代码如下,大家可以运行下,看看,有BUG,但我没找出错在哪
import javax.swing.*;
public class Ex_1
{
public static void main(String args[])
{
String amountString=JOptionPane.showInputDialog(null,"请输入钱数","整钱兑零",JOptionPane.QUESTION_MESSAGE);
double amount=Double.parseDouble(amountString);
int y=(int)amount; //把amount转换为整型
double y2=(double)y; //把y转换为double型
int j5=(int) ((amount-y2)/0.5);
int j1=(int)((amount-y2-j5*0.5)/0.1);
int f5=(int)((amount-y2-j5*0.5-j1*0.1)/0.05);
int f2=(int)((amount-y2-f5*0.05-j5*0.5-j1*0.1)/0.02);
int f1=(int)((amount-y2-f5*0.05-j5*0.5-j1*0.1-f2*0.02));
System.out.println(y+"(1元)"+j5+"(5角)"+j1+"(1角)"+f5+"(5分)"+f2+"1(2分)"+f1+"(1分)");
}
}
...全文
206 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
kshaoye 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 viszl 的回复:]
引用 15 楼 kshaoye 的回复:


感谢您对我代码的修改!但是……不妨输入12.68试试,结果和12.67一样

那是你的程序的LJ问题了,呵呵
[/Quote]
9楼代码没问题
loveofmylife 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kshaoye 的回复:]


感谢您对我代码的修改!但是……不妨输入12.68试试,结果和12.67一样
[/Quote]
那是你的程序的LJ问题了,呵呵
kshaoye 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 viszl 的回复:]
引用 12 楼 duxinmmmm 的回复:
强制转换后要丢失精度。。。
我只晓得这个。。

不是强转的问题,是Double类型数据的toSting()方法的问题
可以看一下《java Puzzlers》第2还是3(记不清了)谜题,很基础的问题,结局方法像我11楼那样
[/Quote]

感谢您对我代码的修改!但是……不妨输入12.68试试,结果和12.67一样
kshaoye 2009-10-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 java1109 的回复:]
把package test;去掉应该就没问题了
[/Quote]
还是不行哦!
loveofmylife 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 duxinmmmm 的回复:]
强制转换后要丢失精度。。。
我只晓得这个。。
[/Quote]
不是强转的问题,是Double类型数据的toSting()方法的问题
可以看一下《java Puzzlers》第2还是3(记不清了)谜题,很基础的问题,结局方法像我11楼那样
duxinmmmm 2009-10-08
  • 打赏
  • 举报
回复
强制转换后要丢失精度。。。
我只晓得这个。。
loveofmylife 2009-10-08
  • 打赏
  • 举报
回复
import java.math.BigDecimal;
import javax.swing.*;
public class Ex_1
{
public static void main(String args[])
{
String amountString=JOptionPane.showInputDialog(null,"请输入钱数","整钱兑零",JOptionPane.QUESTION_MESSAGE);
double amount=Double.parseDouble(amountString);
int y=(int)amount; //把amount转换为整型
double y2=(double)y;//把y转换为double型
BigDecimal b=new BigDecimal(new Double(amount).toString()).subtract(new BigDecimal(new Double(y2).toString()));
int j5=(int) (b.doubleValue()/0.5);
int j1=(int)((b.subtract(new BigDecimal(j5*0.5+"")).doubleValue())/0.1);
BigDecimal b1=(b.subtract(new BigDecimal(j5*0.5+"")).subtract(new BigDecimal(j1*0.1+"")));
int f5=(int)(((b1.doubleValue()))/0.05);
BigDecimal b2=b1.subtract(new BigDecimal(f5*0.05+""));
int f2=(int)((b2.doubleValue())/0.02);
BigDecimal b3=b2.subtract(new BigDecimal(f2*0.02+""));
int f1=(int)((b3.doubleValue()));
System.out.println(y+"(1元)"+j5+"(5角)"+j1+"(1角)"+f5+"(5分)"+f2+"(2分)"+f1+"(1分)");
}
}

输入12.67
测试结果:12(1元)1(5角)1(1角)1(5分)1(2分)0(1分)
csliyu 2009-10-08
  • 打赏
  • 举报
回复
import javax.swing.*;
public class test4 {
public static void main(String args[]) {
String amountString=JOptionPane.showInputDialog(null,"saisir","re",JOptionPane.QUESTION_MESSAGE);
double amount=Double.parseDouble(amountString);
int a=(int) (amount*100);
int y=a/100;
a=a-(y*100);
int j5=a/50;
a=a-(j5*50);
int j1=a/10;
a=a-(j1*10);
int f5=a/5;
a=a-(f5*5);
int f2=a/2;
int f1=a%2;
System.out.println(y+"(1y)"+j5+"(5j)"+j1+"(1j)"+f5+"(5f)"+f2+"(2f)"+f1+"(1f)");
}
}

java1109 2009-10-08
  • 打赏
  • 举报
回复
把package test;去掉应该就没问题了
kshaoye 2009-10-08
  • 打赏
  • 举报
回复
package test;

import java.util.ArrayList;
import java.util.Collection;

import javax.swing.JOptionPane;

public class Ex_11{
// final static Collection <Money>MoneyArray = new ArrayList<Money>();

final static Integer[] MONEY = { 10000, 5000, 1000, 500, 100, 50, 10, 5, 1 };
final static String[] WORTH = { "一百元", "五十元", "十元", "五元", "一元", "五角", "一角",
"五分", "一分" };
final static Integer ZERO = 0;
static Integer i = 0;
static Integer amount;
static Integer[] C;

public static void main(String args[]) {
String amountString = JOptionPane.showInputDialog(null, "请输入钱数",
"整钱兑零", JOptionPane.QUESTION_MESSAGE);
double a = Double.parseDouble(amountString);
a = a * 100;
amount = (int) a;

C = new Integer[MONEY.length];

while (Cal(MONEY[i])) {
}
}

public static Boolean Cal(Integer m) {
if (amount <= ZERO) {
int c = 0;
for (Integer in : C) {
System.out.println(C[c] + "个" + WORTH[c]);
++c;

}
System.out.println();
return false;
} else if (amount >= m) {
amount = amount - m;
if (C[i] != null)
C[i] = C[i] + 1;
else
C[i] = 1;
// System.out.println(c + "个" + WORTH[i]);

return true;
} else {
i = i + 1;

// c = 0;
return true;

}

}
}

这段代码为什么编译没问题,运行时报错?
错误如下:
Exception in thread "main" java.lang.NoClassDefFoundError: Ex_11 (wrong name: t
st/Ex_11)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Ex_11. Program will exit.
kshaoye 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zqv11 的回复:]
是因为精度问题造成的bug,每一个结果(分的下一位)使用四舍五入就好了。
[/Quote]
哦!帮我修改下代码可以吗?
zqv11 2009-10-08
  • 打赏
  • 举报
回复
是因为精度问题造成的bug,每一个结果(分的下一位)使用四舍五入就好了。
kshaoye 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bolink5 的回复:]
  LZ把代码帖出来啊
[/Quote]
在3楼呀
bolink5 2009-10-08
  • 打赏
  • 举报
回复
LZ把代码帖出来啊
kshaoye 2009-10-08
  • 打赏
  • 举报
回复
import javax.swing.*;
public class Ex_1
{
public static void main(String args[])
{
String amountString=JOptionPane.showInputDialog(null,"请输入钱数","整钱兑零",JOptionPane.QUESTION_MESSAGE);
double amount=Double.parseDouble(amountString);
int y=(int)amount; //把amount转换为整型
double y2=(double)y; //把y转换为double型
int j5=(int) ((amount-y2)/0.5);
int j1=(int)((amount-y2-j5*0.5)/0.1);
int f5=(int)((amount-y2-j5*0.5-j1*0.1)/0.05);
int f2=(int)((amount-y2-f5*0.05-j5*0.5-j1*0.1)/0.02);
int f1=(int)((amount-y2-f5*0.05-j5*0.5-j1*0.1-f2*0.02));
System.out.println(y+"(1元)"+j5+"(5角)"+j1+"(1角)"+f5+"(5分)"+f2+"1(2分)"+f1+"(1分)");
}
kshaoye 2009-10-08
  • 打赏
  • 举报
回复

import javax.swing.*;
public class Ex_1
{
public static void main(String args[])
{
String amountString=JOptionPane.showInputDialog(null,"请输入钱数","整钱兑零",JOptionPane.QUESTION_MESSAGE);
double amount=Double.parseDouble(amountString);
int y=(int)amount; //把amount转换为整型
double y2=(double)y; //把y转换为double型
int j5=(int) ((amount-y2)/0.5);
int j1=(int)((amount-y2-j5*0.5)/0.1);
int f5=(int)((amount-y2-j5*0.5-j1*0.1)/0.05);
int f2=(int)((amount-y2-f5*0.05-j5*0.5-j1*0.1)/0.02);
int f1=(int)((amount-y2-f5*0.05-j5*0.5-j1*0.1-f2*0.02));
System.out.println(y+"(1元)"+j5+"(5角)"+j1+"(1角)"+f5+"(5分)"+f2+"1(2分)"+f1+"(1分)");
}
amdgaming 2009-10-08
  • 打赏
  • 举报
回复
哪有代码?

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧