Pessoal, estou fazendo uma questão que pede para criar um vetor de 5 posições que armazene o sexo, nome e salário , sendo que se o sexo for “F” e salário maior que 5000 , deverá ser mostrado em tela.
Criei um vetor e depois um laço for com uma estrutura condicional para exibir o que foi solicitado pela questão, mas quando coloco o sistema para rodar parece que o laço não está sendo executado. Segue o código…
package listaguanabara;
import java.util.Scanner;
import java.util.Arrays;
/**
*
* @author Andre
*/
public class NewClassVetores85 {
public static void main(String[] args) {
String[] sexo= new String[5];
String[]nome= new String[5];
double[]sal= new double[5];
int i;
for(i=0;i<sexo.length;i++){
System.out.println("Informe o seu sexo:");
sexo[i]= new Scanner(System.in).nextLine();
System.out.println("Informe o seu nome:");
nome[i]=new Scanner(System.in).nextLine();
System.out.println("Informe o seu salário:");
sal[i]= new Scanner(System.in).nextDouble();
}
for(i=0;i<sexo.length;i++){
if(sexo[i]=="f"){
if(sal[i]>5000){
System.out.println("Sra " + nome[i] + " tem um salário de " + sal[i] + " reais.");
}
}
}
}
}
O System.in é único, então não faz sentido criar vários objetos Scanner para ler ele, cria um só.
Quando você usa o Scanner para ler entrada de dados pelo TECLADO, deve utilizar somente o método nextLine(), pois é o único método que consome adequadamente a quebra de linha produzida ao pressionar ENTER.
O operador == serve para comparar o valor de tipos primitivos e o endereço de memória de objetos. String não é um tipo primitivo, então no seu código você está comparando o endereço de memória e não o conteúdo da String.
Para comparar o conteúdo, utilize o método equals.
Veja:
import java.util.Scanner;
/**
* @author Andre
*/
public class NewClassVetores85 {
private static final Scanner in = new Scanner(System.in);
public static void main(String[] args) {
String[] sexo = new String[5];
String[] nome = new String[5];
double[] sal = new double[5];
for (int i = 0; i < sexo.length; i++) {
System.out.println("Informe o seu sexo:");
sexo[i] = in.nextLine();
System.out.println("Informe o seu nome:");
nome[i] = in.nextLine();
System.out.println("Informe o seu salário:");
sal[i] = Double.parseDouble(in.nextLine());
}
for (int i = 0; i < sexo.length; i++) {
if (sexo[i].equals("f")) {
if (sal[i] > 5000) {
System.out.println("Sra " + nome[i] + " tem um salário de " + sal[i] + " reais.");
}
}
}
}
}
Pergunta:
Você precisa realmente criar 3 arrays?
Não poderia criar um array de objetos do tipo Pessoa contendo os atributos sexo, nome e salario por exemplo?
Veja:
Classe Pessoa:
public class Pessoa {
public String sexo;
public String nome;
public double salario;
}
Seu exercício refatorado:
import java.util.Scanner;
/**
* @author Andre
*/
public class NewClassVetores85 {
private static final Scanner in = new Scanner(System.in);
public static void main(String[] args) {
Pessoa[] pessoas = new Pessoa[5];
for (int i = 0; i < pessoas.length; i++) {
pessoas[i] = new Pessoa();
System.out.println("Informe o seu sexo:");
pessoas[i].sexo = in.nextLine();
System.out.println("Informe o seu nome:");
pessoas[i].nome = in.nextLine();
System.out.println("Informe o seu salário:");
pessoas[i].salario = Double.parseDouble(in.nextLine());
}
for (Pessoa pessoa : pessoas) {
if (pessoa.sexo.equals("f")) {
if (pessoa.salario > 5000) {
System.out.println("Sra " + pessoa.nome + " tem um salário de " + pessoa.salario + " reais.");
}
}
}
}
}
Coloquei o equals e ele rodou aqui. Sobre as perguntas , ainda não me considero maduro o suficiente para responde las. Estou finalizando um curso de Java básico de uma plataforma (não sei se posso falar o nome dela) e seguindo o roteiro de estudos, o próximo conteúdo é Programação Orientada a Objetos. Creio que com conhecimento de POO conseguiria criar uma array de objetos do tipo Pessoa com os atributos citados.
Muito obrigado pela orientação e sugestões acerca da questão, me ajudou bastante.