题目很简单,就是输出1—500之内的所有“完数”和他们的因子,所谓完数就是一个数=各个因子之和。可能我的程序写得有点太过于“向面向对象靠拢”的模式化,毕竟以前我都是接触面向过程的,所以想培养一下面向对象的思想:)高手不要见笑啊!
这个算法我的程序肯定没有问题,编译也通过了,但是运行的时候出现了错误提示:Exception in thread "main" java.lang.NullPointerException at CompletedNumberTest.IsCompletedNumber at CompletedNumber.main,这是问什么呢?这是什么错误?
程序清单如下:
public class CompletedNumber{
public static void main(String[ ] args){
System.out.print("1—500之内的完数 因子");
for(int i=1; i<=500; i++){
CompletedNumberTest numObj=new CompletedNumberTest();
numObj.IsCompletedNumber(i);
}
}
}class CompletedNumberTest{
private static int[] arrOfFactors;
public void IsCompletedNumber(int number){
int countOfFactors=0, numOfFactors=0;
for(int i=1; i<=number/2; i++){
if (number%i==0){
countOfFactors+=i;
arrOfFactors[numOfFactors]=i;
numOfFactors++;
}
}
if (number==countOfFactors){
System.out.print('\n'+number+':');
for(int i=0; i<numOfFactors; i++)
System.out.print(arrOfFactors[i]+' ');
}
}}
这个算法我的程序肯定没有问题,编译也通过了,但是运行的时候出现了错误提示:Exception in thread "main" java.lang.NullPointerException at CompletedNumberTest.IsCompletedNumber at CompletedNumber.main,这是问什么呢?这是什么错误?
程序清单如下:
public class CompletedNumber{
public static void main(String[ ] args){
System.out.print("1—500之内的完数 因子");
for(int i=1; i<=500; i++){
CompletedNumberTest numObj=new CompletedNumberTest();
numObj.IsCompletedNumber(i);
}
}
}class CompletedNumberTest{
private static int[] arrOfFactors;
public void IsCompletedNumber(int number){
int countOfFactors=0, numOfFactors=0;
for(int i=1; i<=number/2; i++){
if (number%i==0){
countOfFactors+=i;
arrOfFactors[numOfFactors]=i;
numOfFactors++;
}
}
if (number==countOfFactors){
System.out.print('\n'+number+':');
for(int i=0; i<numOfFactors; i++)
System.out.print(arrOfFactors[i]+' ');
}
}}
解决方案 »
- 如何用java发送post请求,重要的是将textarea中的内容也发送过去?请教高手![
- 系统分析,系统设计,系统实施,系统测试,都分别是软件开发中的什么阶段?
- 如何判断一个字符串里有一个特殊字符,并且将这个特殊字符代替成另一个特殊字符!
- 求JAVA方面数据结构的书
- 数组问题
- "java.lang.NoClassDefFoundError" 是怎么回事?
- 请各位帮个简单问题,JAVA中取得一个汉字或字符的ASC码,是用Asc函数么?怎么用?
- 为什么运行不了Applet?
- 关于分页,敬请关注!!
- 请问:java可以做网络操作系统吗?
- 文件删除的捆恼
- 看完DefaultTableModel和DefaultTableColumnModel的疑惑?谁帮我解一下惑,呵呵
//这个方法里面写你的业务
public void IsCompletedNumber(int number){}
//生成一个对象,然或调用上面的算法
public static void main(String[ ] args){}
}
//我不懂算法,只是改了你的程序/*输出1—500之内的所有“完数”和他们的因子,所谓完数就是一个数=各个因子之和。*/
public class CompletedNumber {
private static final int NUMBER = 500;
public static void main(String[] args) {
System.out.println("1—500之内的完数 因子");
CompletedNumberTest numObj = new CompletedNumberTest(NUMBER);
for (int i = 1; i <= NUMBER; i++) {
numObj.IsCompletedNumber(i);
}
}
}/**
*
* 作者: Loon
* 时间: 2005-9-24
*
* 工程: eprj-test
* 位置:
*//**
* 判断是否是一个完数,并输出结果
*/
class CompletedNumberTest { private int[] arrOfFactors;
CompletedNumberTest(int number){
arrOfFactors = new int[number];
} public void IsCompletedNumber(int number) {
int countOfFactors = 0, numOfFactors = 0;
for (int i = 1; i <= number / 2; i++) {
if (number % i == 0) {
countOfFactors += i;
arrOfFactors[numOfFactors] = i;
numOfFactors++;
}
}
if (number == countOfFactors) {
System.out.print(number + ":");
for (int i = 0; i < numOfFactors -1; i++)
System.out.print(arrOfFactors[i] + ",");
System.out.println(arrOfFactors[numOfFactors - 1]);
}
}}
public class CompletedNumber{
private static final int COUNT=100;
public static void main(String[ ] args){
System.out.println ("1—500之内的完数 因子");
CompletedNumberTest numObj = new CompletedNumberTest(COUNT);
for(int i=1; i<=500; i++)
numObj.IsCompletedNumber(i);
}
}class CompletedNumberTest{
private static int[] arrOfFactors;
CompletedNumberTest(int count){
arrOfFactors = new int[count];
}
public void IsCompletedNumber(int number){
int countOfFactors=0, numOfFactors=0;
for(int j=1; j<=number/2; j++){
if (number%j==0){
countOfFactors+=j;
arrOfFactors[numOfFactors]=j;
numOfFactors++;
}
}
if (number==countOfFactors){
System.out.println(number+": ");
for(int i=0; i<numOfFactors; i++)
System.out.print(arrOfFactors[i]+',');
}
}}