| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1577 人关注过本帖
标题:[求助]Java编的求最小公倍数的程序,老是不对。。。调试了无数次了,请达人 ...
只看楼主 加入收藏
不死鬼鬼
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2005-12-9
收藏
 问题点数:0 回复次数:5 
[求助]Java编的求最小公倍数的程序,老是不对。。。调试了无数次了,请达人指教。。

//根据老师的要求,用这种算法求最小公倍数。总是有错
import javax.swing.JOptionPane;

public class LCM {

/** Main methed */
public static void main(String[] args) {

// Prompt user input the two numbers
String oneString = JOptionPane.showInputDialog(null,
"Please input the first number:", "Input",
JOptionPane.INFORMATION_MESSAGE);
String twoString = JOptionPane.showInputDialog(null,
"Please input the second number:", "Input",
JOptionPane.INFORMATION_MESSAGE);

// Convert the two strings into int value
double oneDouble = Double.parseDouble(oneString);
double twoDouble = Double.parseDouble(twoString);

double twoNumbersLcm; // 定义的这个字段用来存放最后的结果,也就是两个数的最小公倍数

twoNumbersLcm = lcm(oneDouble, twoDouble);
JOptionPane.showMessageDialog(null, "The lease common multiple is "
+ twoNumbersLcm, "Answer", JOptionPane.INFORMATION_MESSAGE);
}

// 求最小公倍数
public static double lcm(double one, double two) {

double[][] ones = new double[10][2];
double[][] twos = new double[10][2];
double commonMultiple = 1;

divide(ones, one);
divide(twos, two);

commonMultiple = multiple(ones, twos);

return commonMultiple;
}

// 求因子,并将得到的因子和出现的次数存到二维数组中
public static void divide(double array[][], double dividend) {

int i = 0;
double divisor = 2.0;

do {
while (dividend % divisor == 0) {
array[i][0] = divisor;
array[i][1]++;
dividend = dividend / divisor;
}
i++;
divisor++;
} while (dividend != 1);

}

//
public static double multiple(double arrayOne[][], double arrayTwo[][]) {
int i = 0;
double power = 1;

// 去次数较大的因子相乘,得到最小公倍数
while (i<=arrayOne.length || i<=arrayTwo.length) {
if (arrayOne[i][0] == arrayTwo[i][0]) {
if (arrayOne[i][1] >= arrayTwo[i][1])
power *= Math.pow(arrayOne[i][0], arrayOne[i][1]);
else
power *= Math.pow(arrayTwo[i][0], arrayTwo[i][1]);
} else
power = Math.pow(arrayOne[i][0], arrayOne[i][1])
* Math.pow(arrayTwo[i][0], arrayTwo[i][1]);
i++;
}
if (arrayOne[i][0] != 0)
power *= Math.pow(arrayOne[i][0], arrayOne[i][1]);
else
power *= Math.pow(arrayTwo[i][0], arrayTwo[i][1]);
return power;
}
}

搜索更多相关主题的帖子: Java 最小公倍数 调试 指教 
2006-04-02 16:48
不死鬼鬼
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2005-12-9
收藏
得分:0 
总是出现这种错误
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at LCM.multiple(LCM.java:67)
at LCM.lcm(LCM.java:37)
at LCM.main(LCM.java:22)
2006-04-02 16:49
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
你这个异常是数组越界异常
while (i<=arrayOne.length || i<=arrayTwo.length) {
你这里不应该有等于的情况出现,因为数组的下标最大的就是数组的长度-1
应该改为while (i<arrayOne.length || i<arrayTwo.length) {
可是改完后,你的i在最后的时候又等于了ARRAY的长度了,这个时候应该把i再减1,这样就不会有异常了,可是结果却不正确,所以你要看看你的算法是否正确

可惜不是你,陪我到最后
2006-04-02 17:10
不死鬼鬼
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2005-12-9
收藏
得分:0 

谢谢。。。。算法是有错误。。。当数组中有0出现时,一乘起来结果就成了0了。。。我想是这样

2006-04-02 17:37
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
做数组的运算尤其要注意下标越界的问题,在JAVA中还好,可以告诉你是异常,还会说哪里出异常了
如果是在C。C++中的话,就那样算过去了。那样的话出的错都莫名奇妙。不知道哪里错了,

可惜不是你,陪我到最后
2006-04-02 17:38
不死鬼鬼
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2005-12-9
收藏
得分:0 

谢谢版主。。。。程序已经Ok了。。。作业完成了。。。心情好啊。。。。呵呵,再写点儿注释就可以交了。。。

2006-04-02 18:03
快速回复:[求助]Java编的求最小公倍数的程序,老是不对。。。调试了无数次了,请 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017396 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved