日期:2014-05-20  浏览次数:20767 次

《菜鸟求助》关于正整数分解质因数的问题
/* 
 * 题目:讲一个正整数分解质因数 例如:输入90,打印出2*3*3*5
 * 
 */
import java.util.*;

public class practice04 {
  public static void main(String[] args){
/*
* n代表正整数,new_n代表每次判断除后剩下的值,prime表示质数,formula代表分解后的式子
*/
int n,new_n;
int prime = 2;
StringBuffer formula = new StringBuffer(1000);
Scanner s = new Scanner(System.in);
//这里没有进行输入值判断
n = s.nextInt();
new_n = n;
//比如是n = 45
while(!JudgePrime.isPrime(new_n,formula)){
   
if(n % prime == 0){
new_n = n/prime;
formula.append(prime+"*");
prime = 2;//需要重置一下 要不prime不能更新
}
else{
prime ++;
}
}
  }
}
/*
 *这个类就是为了判断n是否已经是质因数
*/
class JudgePrime{
public JudgePrime(){}

public static boolean isPrime(int i,StringBuffer sb){
  if(i == 2 ||i == 3|| i ==5){
  sb.append(i);
  System.out.println(sb);
  return true;
  }
  return false;
}
}
问题:当输入一个数时,为什么会报
  Exception in thread "main" java.lang.OutOfMemoryError: Java heap space的错误? 我先去上课了,希望大家帮我看一下

------解决方案--------------------
因为你的isPrime不能判断如7,11,13,...等等质数
所以while(!JudgePrime.isPrime(new_n,formula))可能导致永远无法终止的循环,最终内存溢出
------解决方案--------------------
你的处理逻辑也有问题。顺手写了点,没考虑太多的东西,给你做个参考吧。
import java.util.*;

public class Temp {

public static void main(String[] args) {
Temp t = new Temp();
t.test();
}

public void test() {
int n;
int prime = 2;
StringBuffer formula = new StringBuffer(1000);
Scanner s = new Scanner(System.in);
//这里没有进行输入值判断
n = s.nextInt();
while(true) {
if (n % prime == 0) {
formula.append(prime+"*");
n = n / prime;
} else {
if (prime * prime > n) {
if (n > 1) {
formula.append(n);
} else {
formula.deleteCharAt(formula.length() - 1);
}
break;
}
prime++;
}
}
System.out.println(formula.toString());
}
}