DÚVIDA: Erro no código em java
Aparece essa mensagem de erro: java: variable i is already defined in method main(java.lang.String[])
Se puderem dar uma ajuda agradeceria (Acho que resolvi o problema e não sei como, gostaria de saber sobre o erro em si)
O código é esse:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Funcionario[] funcionarios = new Funcionario[5];
double somaSalario = 0;
int i;
for (i = 0; i < funcionarios.length; i++) {
System.out.println("Informe o nome do funcionário " + (i + 1) + ":");
String nome = scan.nextLine();
System.out.println("Informe o salário do funcionário " + (i + 1) + ":");
double salario = scan.nextDouble();
scan.nextLine();
funcionarios[i] = new Funcionario(nome, salario);
somaSalario += salario;
}
double mediaSalarios = somaSalario / funcionarios.length;
System.out.println("Funcionários com salário acima da média: ");
for (i = 0; i < funcionarios.length; i++) {
if (funcionarios[i].getSalario() > mediaSalarios) {
System.out.println(funcionarios[i].getNome());
}
}
for (i = 0; i < funcionarios.length; i++) {
if (funcionarios[i].getSalario() > mediaSalarios) {
funcionarios[i].setSalario(funcionarios[i].getSalario() * 1.05);
} else {
funcionarios[i].setSalario(funcionarios[i].getSalario() * 1.1);
}
}
System.out.println("\nFuncionários após o reajuste:");
for (i = 0; i < funcionarios.length; i++) {
System.out.println(funcionarios[i]);
}
}
}
O erro diz que o variável i já foi definida, provavelmente tu criou um int i dentro do for, já que tu definou o i fora, mas por convenção a galera utiliza o for(int i) mesmo.
Acho que resolvi o problema e não sei como, gostaria de saber sobre o erro em si
Sim, resolveu porque o código que vc colocou não dá o erro indicado.
O que daria o erro é se tivesse algo assim:
int i;
for (int i = 0; i < funcionarios.length; i++) {
Pois aí vc teria duas variáveis i
sendo definidas (uma antes do for
e outra dentro dele). Mas como você faz for (i = 0
, quer dizer que você está usando a variável i
que foi declarada na linha anterior.
De qualquer forma, eu prefiro remover o primeiro int i
e em cada for
declarar seu próprio i
(ou seja, for (int i = 0 etc
). Pois aí você limita o escopo de cada i
e fica claro que ele só "existe" ali. Claro que nesse caso específico não faz diferença, mas de forma geral, o ideal é limitar as variáveis ao menor escopo possível, pois isso deixa claro onde ela é usada e em códigos mais complexos, evita colisão de nomes e deixa o código menos confuso.
Se bem que, do segundo loop em diante você só está percorrendo os elementos, e não precisa mais do índice. Então poderia trocar para o enhanced for:
for (Funcionario func : funcionarios) {
if (func.getSalario() > mediaSalarios) {
System.out.println(func.getNome());
}
}
for (Funcionario func : funcionarios) {
if (func.getSalario() > mediaSalarios) {
func.setSalario(func.getSalario() * 1.05);
} else {
func.setSalario(func.getSalario() * 1.1);
}
}
System.out.println("\nFuncionários após o reajuste:");
for (Funcionario func : funcionarios) {
System.out.println(func);
}
Como já disseram, vc "resolveu" o problema pq seu código não dá mais esse erro específico.
O erro simplesmente diz que você está tentando redefinir uma variável já declarada, basicamente tentando criar duas variáveis com o mesmo nome.
Para loop for, você não precisa criar uma variável index no escopo da classe, você pode criar diretamente no escopo no loop. Inclusive é por isso que o nome 'i' é bem aceito. Uma variável para escopo maior deveria ter um nome mais intuitivo.