《菜鸟求助》关于正整数分解质因数的问题
/*
* 题目:讲一个正整数分解质因数 例如:输入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());
}
}