【问题标题】:Hailstone Java Program冰雹Java程序
【发布时间】:2019-05-27 21:57:01
【问题描述】:

我正在开发用户选择一个正整数的冰雹序列程序。如果数字是偶数,它将被除以二。如果数字是奇数,则将其乘以三并加一。程序将继续执行,直到数字等于 1。程序还将告诉用户达到 1 所需的步数。

目标是递归完成,我的问题是我无法向用户声明每个步骤,因为计算发生在数字上,例如“数字是所以我除以 2 并且它 =”

这是我目前的代码,任何建议或替代方案都会有所帮助。

谢谢

import javax.swing*

{
   public class hailstone {
   static int Count;
   static int HailstoneNumbers(int Num)
   output += (Num + " " ) ;
   JOptionPane.showMessageDialog(null, output);

    if (Num == 1 && Count == 0) {
        return Count;

    }
    else if (Num == 1 && Count != 0) {
        //n-1
        Count++;
        return Count;
    }
    else if (Num % 2 == 0) {
        Count++;
        HailstoneNumbers(Num / 2);
    }
    else if (Num % 2 != 0) {
        Count++;
         HailstoneNumbers(3 * Num + 1);
    }
    return Count;


}

public static void main(String[] args)
{
    int Num = Integer.parseInt(JOptionPane.showInputDialog("\n Enter a positive number"));
    int x;

    x = HailstoneNumbers(Num);


   JOptionPane.showMessageDialog(null, "Number of Steps" + x );
}

}

【问题讨论】:

    标签: java


    【解决方案1】:

    您致电HailstoneNumbers(Num / 2);。如果您想递归地执行此操作,该函数必须在每一步都返回自身,例如return HailstoneNumbers(Num / 2);。此外,如果您正在修改全局变量,那么递归是没有意义的。这是一个例子:

    int hailstone(int i, int steps) {
        steps++;
        if(i == 1) return steps;
        if(i % 2 == 0) return hailstone(i / 2, steps);
        else return hailstone(i * 3 + 1, steps);
    }
    
    // main function
    x = hailstone(num, 0);
    

    请注意,按照惯例,函数和变量不应以大写字母开头,除非它们是 final

    【讨论】:

      【解决方案2】:

      另一种解决方案。通过将 print 语句放在方法中进行简化。此外,用户不必担心初始化步数,所以我重载了collatz 方法。注意:它的正式名称是Collatz Conjecture,所以我相应地命名了这些方法。

      
         public int collatz(int v) {
            return hail(v, 0);
         }
      
         private int collatz(int v, int count) {
            System.out.println(v);
            if (v != 1) {
               return hail((v & 1) == 1 ? v * 3 + 1
                     : v / 2, count + 1);
            }
            return count;
         }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-08
        • 2012-08-29
        • 1970-01-01
        • 1970-01-01
        • 2020-09-06
        • 1970-01-01
        相关资源
        最近更新 更多