Return não fuinciona em java. pq getNome() não está retornando? [Return & getName();]

package Ex01Lista06;

import java.util.ArrayList;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		ArrayList <Classe> baixa = new ArrayList<Classe>();
		ArrayList <Classe> alta = new ArrayList <Classe>();
		
		int opc = 10;
		
		while(opc != 0) {
			System.out.println("Informe por favor a opção desejada:\n"
					+ "1. Cadastar Novo Funcionário\n"
					+ "2. Ver Funcionários de Alta renda\n"
					+ "0. sair");
			opc = sc.nextInt();
			
			switch(opc) {
				case 1:
					System.out.println("Informe o nome do funcionário");
					String nome = sc.nextLine();
					sc.nextLine();
					System.out.println("Informe o salario do funcionário");
					float salario = sc.nextFloat();
					sc.nextLine();
					
					Classe fun = new Classe(nome,salario);
					
					if(salario >= 5000) {
						alta.add(fun);
					}
					else {
						baixa.add(fun);
					}
					System.out.println("Funcionário cadastrado com sucesso");
					break;
				case 2:
					for(Classe n: alta) {
						System.out.println(n.getNome()); //AQUI SIMPLESMENTE NÃO RETORNA O NOME
					}
					
			}
		}
	}

}

classe a baixo:

package Ex01Lista06;

public class Classe {

	private String nome;
	private float salario;
	
	public Classe(String n,float s) {
		this.setNome(n);
		this.setSalario(s);
	}
	

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public float getSalario() {
		return salario;
	}

	public void setSalario(float salario) {
		this.salario = salario;
	}
}

Tente remover esses sc.nextLine(); sobrando no código. Talvez eles estejam impactando no fluxo da leitura. E vc não está fazendo nada com os valores lidos por esses nextLine.

Se a ideia era quebrar uma linha no console, vc pode fazer assim:

System.out.println();
2 curtidas

O problema é que o java tem esse pequeno bug de pular a linha, olha so como fica a saida quando tiro o nextLine

Informe por favor a opção desejada:
1. Cadastar Novo Funcionário
2. Ver Funcionários de Alta renda
0. sair
1
Informe o nome do funcionario
//AQUI ELE ESTÁ PULANDO
Informe o salario do funcionário

O problema é que o seu nextLine está consumindo a quebra de linha gerada no nextInt e retornando vazio.

Se for usar o Scanner pra ler o teclado, utilize somente o método nextLine que não terá problemas.

2 curtidas

utilizei apenas next(); e deu certo! não entendo muito esses “bugs” do java ainda, mas ainda bem que deu certo, com sua resposta consegui pensar nisso, obrigado mano!

Isso não é bug, é só uma questão de entender como a classe Scanner funciona. Aqui tem uma explicação bem detalhada, mas se fosse para resumir, siga o que já foi sugerido: para ler entrada de dados do teclado, prefira usar nextLine().

1 curtida

pow mano to começando a entender esse lance dos next
realmente não sabia ainda, obrigado pela dica :slight_smile: