Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

crf_h0m3r

[Resolvido] Problema com return -1

Recommended Posts

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: 1

Digite 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: 1

Digite 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

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

@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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.