/*
Online Java - IDE, Code Editor, Compiler
Online Java is a quick and easy tool that helps you to build, compile, test your programs online.
*/
import java.util.Scanner;

public class Main
{
    public static void main(String[] args) 
    {
        String selection;
        boolean checkInt;
        int choice;
        int positiveNumber=0;
        int higherNumber;
        int lowerNumber;
        
        do
        {
            System.out.println("Make a selection:");
            System.out.println(" 1. Enter a positive number");
            System.out.println(" 2. Check entire range for the longest sequence");
            System.out.println(" 3. Exit");
            
            Scanner reader=null;
            
            reader = new Scanner(System.in);
            System.out.println("Make a selection");
            checkInt = reader.hasNextInt();
            selection = reader.nextLine();
            choice = Integer.valueOf(selection);
            reader=null;
        
        } while(!checkInt);
        
        switch (choice)
        {
            case 1:
            System.out.println("here 1");
            
            do
            {
                Scanner reader=null;
                reader = new Scanner(System.in);
                System.out.println("Enter a positive number");
                positiveNumber=reader.nextInt();
                processSequence(positiveNumber, positiveNumber+2);
                
            } while (positiveNumber>999999);
            
            break;
            
            case 2:
            System.out.println("2");
            
            do
            {
                Scanner reader=null;
                reader = new Scanner(System.in);
                System.out.println("Enter a lowest positive number");
                lowerNumber=reader.nextInt();
                System.out.println("Enter a highest number less than 1000000");
                higherNumber=reader.nextInt();
                
                processSequence(lowerNumber, higherNumber);
                
            } while (!(lowerNumber<higherNumber) || !(higherNumber<1000000) || (lowerNumber<0)|| (higherNumber<0) );
            
            break;
            
            case 3:
            
            System.out.println("Exiting app");
            System.exit(0);
            
            default:
            System.out.println("Invalid selection");
            break;
        }
    }
    
    static void processSequence(int positiveNumber, int higherNumber)
    {
        int[] array = new int[10000000];
        int num=positiveNumber;
        array[num]=positiveNumber;
        int count=0;
        System.out.println("\n");
        
        for (int k =positiveNumber; k<higherNumber-1;k++ )
        {
            System.out.println("***This is the positive number:*** " + positiveNumber);
            
            for (int i=positiveNumber; i<array.length-positiveNumber;i++)
            {
                if (array[i]%2==0)
                {
                    count++;
                    num++;
                    array[num]=(array[num-1])/2;
                }
                
                if (array[i]<0)
                {
                    System.out.println("Number is not positive");
                    break;
                    }
                
                if (array[i]%2==1)
                {
                    count++;
                    num++;
                array[num]= ((array[num-1])*3)+1;

                }
                
                if (array[num]==1)
                {
                    System.out.println("Reached 1");

                    System.out.println("Number sequences to reach 1: \n" + count);
                    processSequence(positiveNumber+1, higherNumber);
                    break;
                }
            }
        }
    }
}