crf_h0m3r 5 Denunciar post Postado Março 19, 2011 Bom dia, antes de tudo, não quero que ninguém resolva nada para mim, o que vou mostrar aqui é um exercício que foi me passado e que eu já tentei resolver, mas o êxito não foi 100%, enfim: Crie um método estático que receba como argumentos um vetor de inteiros e um inteiro, retornando a posição deste naquele. Caso o inteiro valor fornecido não faça parte do vetor, retorne -1. Bom galera, eu comecei meu método estático assim: public class RecebeArgumentos { public static int argumentosRecebe(int[] a, int v){ for(int i=0; i<a.length; i++) if(a[i]==v){ return i; } else{ return -1; } return v; } } e minha classe pública assim: import java.util.Scanner; public class TestarRecebeArgumentos { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int[] v = new int[5]; int a; for (int i=0; i<v.length; i++){ System.out.print("Digite um número inteiro qualquer: "); v[i] = scan.nextInt(); } System.out.print("Digite um número: "); a = scan.nextInt(); int resultado; resultado = RecebeArgumentos.argumentosRecebe(v, a); System.out.println(resultado); } } Quando eu digito um número que não existe no vetor, ele me retorna: Digite um número inteiro qualquer: 1Digite um número inteiro qualquer: 2 Digite um número inteiro qualquer: 3 Digite um número inteiro qualquer: 4 Digite um número inteiro qualquer: 5 Digite um número: 6 -1 Quando eu digito um número que existe no vetor, ele me retorna: Digite um número inteiro qualquer: 1Digite um número inteiro qualquer: 2 Digite um número inteiro qualquer: 3 Digite um número inteiro qualquer: 4 Digite um número inteiro qualquer: 5 Digite um número: 2 -1 Obs: Se o número que eu digitar for 1, ele me retorna 0, qualquer outro existente ele me retorna -1 Bom galera, a dúvida é essa, por que ele está retornado sempre -1, se o número que eu digito existe no vetor que eu acabei de criar. Desde já, grato! Compartilhar este post Link para o post Compartilhar em outros sites
Giovanni Ritchie 0 Denunciar post Postado Março 19, 2011 O problema esta exatamente na sua estrutura de decisao... if(a[i]==v){ return i; } else{ return -1; } Do jeito q esta, sempre q o elemento procurado nao estiver na primeira posicao sera retornado -1. E tem outra coisa, nao existe necessidade de você retorna v, porq v representa o numero e nao a posicao, você deve mudar para isso: for(int i = 0; i<a.length;++i) { if(a[i]==v) return i; return -1; } Repare que ele vai procura o elemente no array, se encontrar vai retornar a posicao( logo return -1 nao sera executado, pq ele sai logo da funcao), se nao encontrar simplesmente retorna -1 Abraco :joia: Compartilhar este post Link para o post Compartilhar em outros sites
crf_h0m3r 5 Denunciar post Postado Março 19, 2011 @Giovanni Ritchie Obrigado pela atenção, acho que você quis dizer com o "return -1" fora da condição if, não? Enfim, fiz com ela fora e deu certo, em partes: public class RecebeArgumentos { public static int argumentosRecebe(int[] a, int v){ for(int i=0; i<a.length;++i) { if(a[i]==v) return i; } return -1; } } Quando eu digito um número que não existe no vetor, ele me retorna: -1 (Certo) Quando eu digito um número que existe no vetor, ele me retorna: O índice desse número no vetor. Gostaria de saber como ele não retornar o índice, mas sim uma mensagem de que existe. Por que se eu troco o "return i" do bloco if, e coloco uma mensagem, o programa roda normal, lê a mensagem e depois retorna o -1. Como se a mensagem fizesse o programa executar o "return -1" do final Compartilhar este post Link para o post Compartilhar em outros sites
Vergil 15 Denunciar post Postado Março 19, 2011 Voce nao pode retornar uma mensagem num metodo do tipo int. Teras que mudar o tipo de retorno do metodo fazendo-o retornar a mensagem desejada. public class RecebeArgumentos { public static String argumentosRecebe(int[] a, int v){ for(int i=0; i<a.length;++i) { if(a[i]==v) return "Mensagem de valor encontrado"; } return "Mensagem de valor nao encontrado"; } } Compartilhar este post Link para o post Compartilhar em outros sites
Giovanni Ritchie 0 Denunciar post Postado Março 20, 2011 Soh uma dica: Isso nao lhe dara beneficio nenhum. Mas eh do jeito que o Vergil mostrou acima! E mais, tenha sempre em mente q você so pode retornar 1 valor, nao existe em hipotese nenhum essa possibilidade. A posicao nesse caso se mostra mais valioso, pq permite você acessar o elemente no array posteriormente(logico, pq ele representa a sua posicao) e sendo diferente de -1 você sabe q foi encontrado, entao pode usar p gerar a mensagem q deseja "encontrou"|"nao encontrou" :joia: Compartilhar este post Link para o post Compartilhar em outros sites
crf_h0m3r 5 Denunciar post Postado Março 20, 2011 Valeu Vergil e Giovanni Ritchie pela atenção! Resolvido. Compartilhar este post Link para o post Compartilhar em outros sites