How to make a method return a string in Java

Asked

Viewed 2,487 times

2

I want to create a program that reads the name and age of a person and compares the ages and finally shows the name of the older person. My reasoning was to compare which is the highest and return the index of the position of the array. But the return is always 0. And also I do not know how to pick up the return and shows the content of array in position.

package Lista1;
import java.util.Scanner;

public class Pessoa {
    private static String nome;
    private static int idade;

    public static int comparaIdade(Pessoa[] pessoa){

        int maior=0;
        int ind = 0;

        for(int i = 0; i<3; i++){
            if(pessoa[i].idade>maior){
                maior=pessoa[i].idade;
                ind=i;
            }
        }
        return ind;

    }

    public static void main(String[] args){
        Pessoa[] pessoa = new Pessoa[3];
        Scanner input = new Scanner(System.in);

        for(int i = 0; i<3; i++){
            System.out.println("Digite o nome da pessoa: ");
            pessoa[i].nome = input.nextLine();
            System.out.println("Digite a idade da pessoa: ");
            pessoa[i].idade = input.nextInt();
            input.nextLine();
        }

        System.out.printf("Nome da pessoa mais velha: %d", comparaIdade(pessoa));

    }



}

1 answer

3


If you want the name returned, you should do this and not return the index as you were doing.

There’s a lot of other mistakes there. You’re mixing the person with the algorithm, you’re creating static members where they should be instance, you’re not instantiating an object before you use it.

import java.util.Scanner;

class Pessoa {
    public String nome;
    public int idade;
}
class Programa {
    public static String comparaIdade(Pessoa[] pessoa){
        int maior = pessoa[0].idade;
        int indice = 0;
        for (int i = 1; i < 3; i++) {
            System.out.println(pessoa[i].idade);
            if (pessoa[i].idade > maior) {
                maior = pessoa[i].idade;
                indice = i;
            }
        }
        return pessoa[indice].nome;
    }

    public static void main(String[] args){
        Pessoa[] pessoa = new Pessoa[3];
        Scanner input = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            pessoa[i] = new Pessoa();
            System.out.println("Digite o nome da pessoa: ");
            pessoa[i].nome = input.nextLine();
            System.out.println("Digite a idade da pessoa: ");
            pessoa[i].idade = input.nextInt();
            input.nextLine();
        }
        System.out.printf("Nome da pessoa mais velha: %s", comparaIdade(pessoa));
    }
}

Behold working in the ideone. And in the repl it.. Also put on the Github for future reference.

  • Is always returning the last position of the array.

  • It’s what I said, your code has other mistakes, it’s not just what I showed in the answer. You’re not creating 3 names, you’re creating 1 and superimposing it, so you’re always the last.

  • Fixed the main bugs.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.