Julia
Julia

Reputation: 61

Collatz Conjecture Method - Java

I am just learning to use methods in Java. I am trying to use a method to output the number of steps it takes to get to 1 using the collatz conjecture. Can anyone help me understand better how to execute the method? This is what I have so far:

public static void main(String[] args) {
  collatz();     
}

public static void collatz(int n) {
  n = 20;
  int i = 0;
  if (n == 1) {         
  } else if (n % 2 == 0) {
      n = (n / 2);

  } else {
     n = (3 * n + 1);

  }
  i++;
System.out.println(i);  
}

Upvotes: 1

Views: 9847

Answers (3)

KayaT
KayaT

Reputation: 1

I know this question was asked a long time ago and i had similar problem so this is my solution:

public class Collatz {
   public static void main(String[] args) {
       collatz(); 
     }

  /*If you have (int n) inside method then 
  when you are calling collatz() you need to have
  value inside parentheses-collatz(20), or do simply like I did. 
  Also you need while loop! It will loop n (20) untill finaly get 1. 
  Otherwise your code will execute only once 
  and you will have as a result 1 step to complete instead of 7*/

   private static void collatz() {  
       int n = 20;                                             
       int i = 0;
       while (n != 1) {

         if (n % 2 == 0) {
           n = (n / 2);
         } else {
         n = (3 * n + 1);
         }
        i++;

       }
    System.out.println(i);
   }
}

Upvotes: 0

dizmac
dizmac

Reputation: 99

This won't work because "i" is only going to be changed at the end of your code and you are not using recursion or any sort of loop in your code. So, even if it did compile, it won't give the right answer.

This is the recursive way that I've done for you.

public class Cycle {
    static int cycle2 (int num) {
        if (num == 1) {
            return 0;
        } else {
            if (num % 2 > 0) {
                return 1 + cycle2(num * 3 + 1);
            } else {
                return 1 + cycle2(num / 2);
            }
        }

    }
    public static void main(String[] args) {
        int num = 14;
        System.out.println(cycle2(num));
    }
}

Upvotes: 1

As I understand it you're asking about the syntax (rather than the algorithm itself), so here's another version of the above:

public static void main(String[] args) {
  // collatz has to be called with a value or it won't compile
  collatz(20);
}

public static void collatz(int n) {
  int i = 0;
  // The following has to occur inside a loop or it'll only occur once
  while (n > 1)
  {
     // The following is what's known as "ternary form" - if the first statement is true, it'll assign the first value. Otherwise it assigns the first value.
     // For example,
     // int a = (1 == 2 ? 10 : 20);
     // will equal 20
     n = (n % 2 == 0 ?
            (n / 2) : // This value will be assigned if n is even
            (3 * n + 1)); // This value will be assigned if n is odd
     i++;
   }
  System.out.println(i);  
}

Upvotes: 0

Related Questions