输出一个数的质因数,java新手虚心求教

Titanicccc 发布于 2016/10/31 22:40
阅读 493
收藏 0

正在学习java,有一道题目是读取一个数,输出他的质因数,中间以x链接,下面是我的代码,我想测试下写的是否正确,但是点了debug之后怎么就没反应了,试了半天也不行,求大神指点,非常感谢。

我的大概思路是把判断是否为质数定义为一个函数,然后判断从2到输入的这个数之间的质数,然后用这个数去除质数做循环。感觉思路是对的,但是代码写的有点晕。

import java.util.Scanner;

public class Lei {
	public static boolean zhishu(int a)
	{
		boolean zhishu = true;
		for(int i=2;i<a;i++)
		{
			if(a%i==0)
			{
				zhishu=false;
				break;
			}
		}
		return zhishu;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int n=in.nextInt();
		if(zhishu(n))
		{
		System.out.println("n="+n);	
		}
		else
		{
			for(int i=2;i<n;i++)
			{
				if(zhishu(n))
				{
					while(n%i==0)
					{
						System.out.print(i+"x");
						n=n/i;
					}
				}
			}
		}
	}

}

加载中
0
NullPointerEx
NullPointerEx
代码逻辑很有问题,if(zhishu(n))是为ture的时候才往下执行。。else后面的代码完全没有起到作用
T
Titanicccc
@NullPointerEx 回复@NullPointerEx : 奥,明白了,我应该把这个if里面的n改成i就行了,非常感谢大神指点
NullPointerEx
NullPointerEx
回复 @Titanicccc : 对啊。。但是你else里面有个if是为真才执行
T
Titanicccc
当false的时候不就是执行else了么
0
xuzhou2013
xuzhou2013
public class PrimeClient { public static void main(String[] args) {


        List<Integer> factorList = allPrimeFactor(1025);   for(int n:factorList){
            System.out.println(n);  }

    } /**  * 获取所有的素数因子  * @param n  * @return  */  public static List<Integer> allPrimeFactor(int n){ return IntStream.rangeClosed(2, n).filter(dat->n%dat==0).filter(dat ->isPrime(dat)).boxed().collect(Collectors.toList());   } /**  * 判断一个整数,是否是 素数  * @param n  * @return  */  public  static boolean isPrime(int n) { return IntStream.range(2,n).allMatch(num->n%num!=0);  }


}
0
xuzhou2013
xuzhou2013
public class PrimeClient {


    public static void main(String[] args) {




        List<Integer> factorList = allPrimeFactor(1025);
        
        for(int n:factorList){
            System.out.println(n);
        }


    }


    /**
     * 获取所有的素数因子
     * @param n
     * @return
     */
    public static List<Integer> allPrimeFactor(int n){
    
       return IntStream.rangeClosed(2, n).filter(dat->n%dat==0).filter(dat ->isPrime(dat)).boxed().collect(Collectors.toList());
       
    }




    /**
     * 判断一个整数,是否是 素数
     * @param n
     * @return
     */
    public  static boolean isPrime(int n) {


        return IntStream.range(2,n).allMatch(num->n%num!=0);
    }




}
❤熊就该有个熊样❤
我真心觉得你并不能看懂他的
T
Titanicccc
额…手机上看好乱…回去去电脑里看看…多谢
0
❤熊就该有个熊样❤
package text;


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


public class zhishu {




public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner word = new Scanner(System.in);
List list = new ArrayList();
int wordG = word.nextInt();
if(wordG==0||wordG==1){
System.out.println("请输入一个除了0和1一位的数字");
}else{
if(wordG==2||wordG==3||wordG==5||wordG==7){
System.out.println(wordG+"是一个素数,质因数为:1和"+wordG);
}
else{
System.out.println(wordG+"是一个合数");
for(int i=1;i<=wordG;i++){
if(wordG%i==0){
list.add(i);
}
}
System.out.println("质因数分别为:"+list);
}
}


}


}

T
Titanicccc
回复 @❤熊就该有个熊样❤ : 上一个确实没看太懂。。。不过有人帮我发现了代码中的错误。。。我已经改好了,谢谢啦。。定义类我也刚开始学,还在联系中
❤熊就该有个熊样❤
按照你的扒的 我写在一个类里呢
返回顶部
顶部