Problem: Write a Java program to convert a decimal number into its corresponding octal representation.

Example:

```Input:    7
Output:   7

Input:    8
Output:   10```

Method 1: Using While Loop

To convert a decimal into octal we divide the decimal number by 8 until it reduces to 0 and stacks the sequence of remainders in a bottom-up manner.

In the Java program, we divide and concatenate remainders inside a while loop as follows:

``````import java.util.Scanner;

public class Main
{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int octal=0, i=1, remainder;

//Input the decimal number
System.out.println("Enter a Decimal Number");
int decimal = in.nextInt();

//loop until the decimal is not 0
while(decimal>0){
remainder = decimal%8;     //compute remainder
octal +=  i*remainder;     //concatenate remainders to the octal
decimal = decimal/8;       //update decimal with quotient
i=i*10;                    //multiply 10 to i
}

//output the octal number
System.out.println("Octal: "+octal);
}
}``````

Output:

Enter a Decimal Number
15
Octal: 17

To concatenate remainders in a bottom-up manner, we first multiply the remainder with 10number_of_digits_in_octal (i*10) then add it to the octal number.

Method 2: Using Recursion

We can also convert a decimal number into an octal number using the recursive approach.

To do so, we recursively call the function with the quotient value (`decimal/8`) and print the remainder after the recursive call.

``````import java.util.Scanner;

public class Main
{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);

//Input the decimal number
System.out.println("Enter a Decimal Number");
int decimal = in.nextInt();

System.out.print("Octal: ");
decToOctal(decimal);              //call the recursive function

}

private static void decToOctal(int n){
if(n>0){
//recall by passing quotient
decToOctal(n/8);

//output the remainder
System.out.print(n%8);
}
}
}``````

Output:

Enter a Decimal Number
8
Octal: 10

By writing the print statement after the recursive call statement, the remainders gets printed in the bottom-up sequence.

It is so because the print action starts when the recursive function starts tracing back to its first recursive call.