/*
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) {
        
        Collatz collatz = new Collatz();
        
        
    
    
}




}

class Collatz
{
    String selection;
        boolean checkInt;
        int choice;
        int positiveNumber=0;
        int higherNumber;
        int lowerNumber;
        int highestCount=0;
        int count=0;
        int outcome[];
        
    public Collatz()
    {
        
        
        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); // Reading from System.in
        System.out.println("Make a selection");
        //selection=reader.nextInt();
        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); // Reading from 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); // Reading from System.in
        System.out.println("Enter a lowest positive number");
        lowerNumber=reader.nextInt();
        System.out.println("Enter a highest number less than 1000000");
        //reader=null;
        
        higherNumber=reader.nextInt();
        
        processSequence(lowerNumber, higherNumber);
        
        
        } while (!(lowerNumber<higherNumber) || !(higherNumber<1000000));
               
                break;
            case 3:
                System.out.println("Exiting app");
                System.exit(0);
            default:
            System.out.println("Invalid selection");
            break;
        }
       
        
   
}

void processSequence(int positiveNumber, int higherNumber)
{
    int[] array = new int[10000000];
    //int pNumber = positiveNumber;
       
        int num=positiveNumber;
        array[num]=positiveNumber;
        
        
        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++;
            System.out.println(array[i] + "  is positive  n/2");
            array[num]=(array[num-1])/2;
            System.out.println(array[num]);
           
        }
        
        if (array[i]<0)
            {
                System.out.println("Number is not positive");
                break;
            }
       
        if (array[i]%2==1)
        {
            
            count++;
            num++;
            System.out.println(array[i]  + "    is negative  3n+1");
            array[num]= ((array[num-1])*3)+1;
            System.out.println(array[num]);
           
        }
       
        if (array[num]==1)
        {
            System.out.println("Reached 1");
            //=positiveNumber+1;
           
            System.out.println("Number sequences to reach 1:  \n" + count);
            
            if (positiveNumber==higherNumber)
            {
                System.exit(0);
            }
            storeSequence(positiveNumber, higherNumber, count);
            processSequence(positiveNumber+1, higherNumber);
            
            
            break;
        }
       
       
    }
}
        
        
        
    }
    
     void storeSequence(int pNumber, int higherNumber, int count)
{
    int highestCount;
    int[] outcome = new int[higherNumber-positiveNumber];
    outcome[positiveNumber]=count;
    highestCount=count;
    this.outcome=outcome;
}
    
    
    
    
    void highestCount()
{
    //int higestCount;
    for (int i=0; i<outcome.length;i++)
    {
        if (count>highestCount)
        {
            highestCount=count;
        }
        
    }
    
    for (int i=0; i<outcome.length;i++)
    {
        if (outcome[i]==highestCount);
        {
            System.out.println("This number in the sequence: " + i + "gives longest sequence of: " + highestCount);
            highestCount=count;
        }
        
    }
    
}
}
