有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用堆栈按降序输出素数?

import java.util.Stack;

public class Primes{
    public static void main(String[]args){
    Stack<Integer> stack = new Stack<Integer>();

    stack.push(null);
    //number of primes to display
    final int NUMBER_OF_PRIMES = 50;
    //number of primes to display per line
    final int NUMBER_OF_PRIMES_PER_LINE = 10;
    //count number of primes
    int count = 0;
    int number = 2;

    System.out.println("The first 50 primes are \n");

    while(count < NUMBER_OF_PRIMES){
        boolean isPrime = true;

    for(int divisor = 2; divisor <= number/2; divisor++){
        if(number % divisor == 0){
            isPrime = false;
            break;
        }
    }
    if(isPrime){
        count++;

        if(count % NUMBER_OF_PRIMES_PER_LINE ==0){
            System.out.println(number);

        }
        else
            System.out.print(number + " ");

    }
    number++;
    }
}
}

共 (4) 个答案

  1. # 2 楼答案

    1. 阅读javadoc for Stack及其父类:Vector
    2. 计算前50个素数成员时,不要在找到它们时显示它们,而是将它们存储在堆栈中
    3. 找到素数后,堆栈将包含找到的所有素数。最小的是堆栈的第一个元素,最大的是堆栈的最后一个元素。从堆栈的末尾开始另一个循环,以降序显示素数

    注意:Stack是一个旧类,不应该再使用了。你应该更喜欢ArrayList

  2. # 3 楼答案

    堆栈的一个有趣特性是,它可以用来反转顺序。这是因为第一个推到上面的物品是最后一个

    想象一下,如果我把单词“pan”的字母一个接一个地推到一堆上。我先按“p”,然后按“a”,再按“n”。现在,因为“n”是最后一个被按下的字母,所以它是第一个从堆栈中弹出的字母。所以,当我删除这些字母时,我会得到“n”,后面跟着“a”,后面跟着“p”-“nap”。通过这种方式,堆栈可以通过将单词视为字符列表来反转单词

    对于素数列表也是如此。如果你有一个按升序排列的前NUMBER_OF_PRIMES素数列表(例如:2,3,5,7…),然后,您可以使用堆栈执行相同的技巧,将列表按降序的顺序进行更改,方法是将每个列表按到堆栈上,然后读取它们

    所以,我要做的是,每次你检测到一个素数,把它推到你的堆栈上,直到堆栈上有NUMBER_OF_PRIMES个素数。然后,将每个项目从堆栈中弹出,以相反顺序打印

    一旦运行起来,将isPrime逻辑拆分为自己的函数也可能是值得的

  3. # 4 楼答案

    因为这是一个家庭作业问题,我不会给出代码,但这里有一个过程,从代码中的某个地方开始

    1. 如果number是prime,则将其推到堆栈上
    2. 当prime finder循环终止时,开始从堆栈中弹出一个新循环。数字将按降序弹出(因为它们是按升序推送的)