Comentei no código. Não sei se ficou claro, mas isso se chama recursividade. Dá uma lida sobre o assunto.
[code]import java.util.*;
class Repr{
public static void main (String args []){
Scanner leitura = new Scanner(System.in);
int n, p;
do{
System.out.print("Digite um valor positivo: ");
//primeiro ele pergunta ao usuário
n = leitura.nextInt();
}while (n <=0);
System.out.println(n + " em representacao decimal é ");
System.out.println(converteOct(n) + " em representacao octal ");
}
static int converteOct(int n){
int r;
if (n/8 == 0){
/se o n° digitado for 6, 6/8 não dá zero, então vai pro else./
/* 6/8 dá 0 sim, Este operador retorna o resultado inteiro, sem a parte decimal. E o operador % retorna o resto. */
r = n % 8;
// então r recebe 6 e ele vai retornar 6 pro usuário
}else{
r = n % 8 + 10 * converteOct(n/8);
// 0,75*10+8 % n=0,5.
/* Supondo que o usuário digitou 10, por exemplo, ele entra neste else. Então r recebe o resto da divisão de 10 por 8 (2) + 10 * o resultado deste mesmo método, só que passando a parte inteira da divisão de 10 por 8 (1), que vai entrar no if e retornar 1. Então r = 2 + 10*1, que dá 12. */
// R vale 0,5. Está certo?
// como disse em cima, errado, dá 12.
}
return r;
//r retorna 0,5 pra onde?
/* no meu exemplo usando 10, a primeira chamada fica esperando o retorno de uma nova chamada. Esta nova chamada retorna para a primeira chamada, que retorna para o usuário. */
[/code]