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;
}
}
Como melhorar este código
15 Respostas
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.
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;
}
}
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.
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;
}
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