Como melhorar este código

[code]import java.util.*;
public class Tab_Uada {

/**
 * @param args
 */

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
    
System.out.println("Digite um numero inteiro enrte 1 e 20 ");

int n =sc.nextInt();

}

///este metodo supostamente de veria fazer a tabuada

public static int taBB(int num,Scanner sc){
int n =sc.nextInt();
System.out.println("Digite um numero inteiro entre 1 e 20");
if (n<=20){
for(int i=1;i<=n;i++)
    
    System.out.println(num);

}
return num;

}    
///// este metodo deveria se o numero fosse maior que 20 mandar repetir a entarda
//"Digite um numero inteiro 
public static int tesTa(int n,Scanner sc ){

if (n>20||n==0){
System.out.println(" Digie um numero inteiro entre 1 e 20 ");
sc.nextInt();

}
return n;
}
}
[/code]
alguem me pode ajudar com este código n esta funcionando , pois estou com duvidas de como os dados q entram do
teclado passam a ser testados nos metodos e como isso retorna com o resultado .Por exemplo se o numero for >20ou =0 deveria
pedir novamente ao utilizador que digitasse novamente um numero entre 1 e 20 ,deveria fazer isso ate o numero estar entre 1 e 20 ,
quaando estivesse deveria fazer a tabuada do numero ate o 20 …11,…12…119…alguma dica para consertar isto

Olá, fc40940 .

Você ainda vai precisar desse código ou o outro que te passei serve?

Ulysses

Ulysses seu outro codigo me ajudou imenso …maas eu gostaria de criar metodos,sou iniciante em java e estou tendo alguma dificuldade com os metodos como crialos e a forma de utiliza-los tens alguma dica pra mim …Obrigado pela ajuda …

Se quer aprender Java, com certeza “métodos” é o caminho certo… vou dar uma olhada no seu código e já te retorno!

Eu faria assim:

import java.util.Scanner;

public class Tabuada {

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int num; //o número da tabuada
		
		System.out.println("Forneça um número de 0 a 9");
		num = in.nextInt();
		
		int[] resultado = fazTabuada(num);
		for(int i = 0; i < resultado.length; i++ ) { //este loop imprime os valores
			System.out.println(resultado[i]);
		}
		
	}
	
	public static int[] fazTabuada(int num) {
		
		int[] resultado = new int[NUMERO_DE_OPCOES]; //cria a array para armazenar os valores da tabuada
		
		for (int i=0; i<resultado.length; i++) { //calcula os valores da tabuada
			resultado[i] = num*i;
		}
		return resultado;
	}
	
	final static int NUMERO_DE_OPCOES = 10; //no caso vc queria fazer com 20, não entendi ao certo como seria

}

Opa, desculpe, só agora percebi a descrição do seu problema no final do código, já te ajudo!

import java.util.Scanner;

public class Tabuada {

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

		do { //esta estrutura receberá um valor, e continuará pedindo pelo valor até que ele esteja na condição solicitada
			System.out.println("Forneça um número de 0 a 9");
			num = in.nextInt();
			if (num < 0 || num > 9) //este if emite a mensagem de erro caso o número esteja fora da condição solicitada
				System.out.println("O número deve ser entre 0 e 9");
		} while (num < 0 || num > 9);

		int[] resultado = fazTabuada(num);
		for (int i = 0; i < resultado.length; i++) {
			System.out.println(resultado[i]);
		}

	}

	public static int[] fazTabuada(int num) {

		int[] resultado = new int[NUMERO_DE_OPCOES];

		for (int i = 0; i < resultado.length; i++) {
			resultado[i] = num * i;
		}
		return resultado;
	}

	final static int NUMERO_DE_OPCOES = 10;

}

Para entender melhor o código é interessante que você estude a estrutura de repetição chamada DO-WHILE, que executa uma vez o código, e continua executando enquanto a condição for válida! É útil se vc quiser que o código seja executado uma vez mesmo antes da condição ser testada.

Ela se aplica no nosso caso, pq antes de testarmos o valor, precisamos que ele seja lido.

Espero ter ajudado!

Abraços!

Boa noite, apesar de já ter sido respondido, mas sempre são outras formas de resolução.

[code]import java.util.*;
import java.io.PrintStream;

public class Tab_Uada {

public static void main(String[] args) {
	Scanner sc = new Scanner(System.in);
	PrintStream s = System.out;//cria como se fosse um "atalho" para System.out

	int n = 0;
	do {
		s.println("Digite um numero inteiro enrte 1 e 20 ");
		n = sc.nextInt();
	} while (testa(n));// se receber false irá parar de pedir o número
	s.print(taBB(n));
}

public static String taBB(int num) {
	String aux = "";/*
					 * irei utilizar para armazenar os dados e retornar,
					 * aqui poderia ser feito um método com retorno void e
					 * já imprimir direto os dados.
					 */
	for (int i = 1; i <= 10; i++) {
		for (int j = 1; j <= num; j++) {
			aux += i + " x " + j + " = " + i*j + "\t"; 
		}
		aux += "\n";
	}
	return aux;
}

public static boolean testa(int n) {
	/* irei retornar false se o número for válido e true se for inválido; */
	if (n > 20 || n <= 0) {
		return true;
	}
	return false;
}

}[/code]

Uma ferramenta que acho muito interessante para quem está comecando a programar é o debugador, com ele cocê consegue entender como ocorre a passagem de informações internamente, verifique a possibilidade de estar usando algum, eu pessoalmente prefiro o do eclipse.

Alessandro, entre a minha solução e a sua, fico com a sua! Heheh

Coloquei o teste na própria execução, enquanto que você o separou em um método.

[code]import java.util.Scanner;

public class Tabuada {

public static void main(String[] args) {
	Scanner in = new Scanner(System.in);
	int num; // o número da tabuada

	System.out.println("Forneça um número de 0 a 9");
	num = in.nextInt();

	fazTabuada(num);
}

public static void fazTabuada(int num) {
	// calcula os valores da tabuada
	for (int i = 1; i <= NUMERO_DE_OPCOES; i++) {
		System.out.println(num * i);
	}
}

// no caso vc queria fazer com 20, não entendi ao certo como seria
final static int NUMERO_DE_OPCOES = 10;

}[/code]

Algumas modificações para melhorar um pouco mais a performance e a leitura do código.

então João, como disse, são formas diferentes de resolver um exercicio, porém eu também, neste caso iria colocar a validação junto com a solicitação do dado, mas como o problema dele é com os métodos fiz desta forma.

Bruno, não gosto muito de colocar métodos como o System.out.println dentro de métodos.
Prefiro retornar valores, e utilizar tais métodos apenas no método de execução.

Recebi recomendações para fazer assim, alguém saberia explicar melhor por que?

Acredito que seja porque dependendo da aplicação do programa tais métodos podem não ser disponíveis, e aí temos que modificar o método.

É isso mesmo?

João, acredito que seja pera reusabilidade dos métodos, facilita o tratamento da informação em diferentes situações.

As duas visões estão corretas ao meu ver.
Porém nós sabemos todo o escopo e que não haverão mudanças aqui.
As mudanças que fiz foram pra melhorar a performance evitando de iterar sobre o array duas vezes.

Com certeza Bruno, não questionei o seu código.

Apenas expliquei pq fiz daquela maneira, e aproveitei para tirar uma dúvida de pq fui recomendado a fazer daquela maneira.

Abraços!

Muito bom este topico obrigado pelas dicas ja me esclareceu bastante com relaçao aos metodos …muito bom mesmo …abraços