Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Algoritmos I - Aula 1 ex 7 - Duvida

Olá pessoal, eu estava estudando essa aula e comecei a tentar praticar no java esse exercicio. Só que eu não estou conseguindo encontrar o resultado que eu quero, eu entendo os erros que estou cometendo, mas não consigo achar a solução..vou colocar o meu codigo abaixo.

public static void main(String[] args) {

double salario[] = new double[4]; salario[0] = 3200; salario[1] = 6000; salario[2] = 5000; salario[3] = 2200;

int atual; int menorSalario = 0; int maiorSalario = 0;

for(atual = 0; atual <= 4; atual++) { if (salario[atual] < salario[menorSalario]); menorSalario = atual; System.out.println(menorSalario); System.out.println(salario[menorSalario]); } }

a principio eu queria tentar achar o menorSalario para depois achar o maiorSalario, mas toda vez que rodo, ele vai mostrando salario a salario no atual. Sei que esta errado a logica, mas como disse, não consigo achar a solução. Se puderem ajudar, eu agradeço.

2 respostas
solução!

Olá Mariana!

Vou tentar te ajudar. Eu executei seu código, e ele rodou da forma que você esperava. No entanto, você precisa corrigir alguns detalhes.

for(atual = 0; atual <= 4; atual++) {
            if (salario[atual] < salario[menorSalario]) {
                menorSalario = atual;
                System.out.println("Posição no array do menor salário: " + menorSalario); 
                System.out.println("Menor salário é: " +salario[menorSalario]);
                } 
            }

Repare que dentro da estrutura de repetição For, você utilizou atual <=4. Isso faz com que ocorra um erro no java em que a estrutura de repetição tenta alcançar um ponto no array o qual ele não existe.

O correto neste caso seria:

for(atual = 0; atual <= 3; atual++) {
            if (salario[atual] < salario[menorSalario]) {
                menorSalario = atual;
                System.out.println("Posição no array do menor salário: " + menorSalario); 
                System.out.println("Menor salário é: " +salario[menorSalario]);
                } 
            }

Como o array de double que você cria é de 4 posições, ele começa na posição 0 e termina na posição 3. Quando você diz que atual<=4, isso faz com que a estrutura de repetição vá até a posição 4, que não existe no seu array e faz com que o java exiba um erro ou não compile seu código.

Outra alteração necessária seria tirar o System.out.println de dentro da estrutura de repetição, já que você quer achar um resultado final, deixe o for fazer a operação de busca, e somente exibir o resultado no fim da operação. Com isso você evitaria duas situações com o código que você possui atualmente.

A primeira é: Se o menor valor estiver na primeira posição, ele não exibiria valor nenhum, visto que tanto atual quanto menorSalario, começam na posição [0]. 0 não é menor que 0, logo, o if não exibiria resultado algum.

A segunda: Se suas posições estivessem em ordem decrescente, ele exibiria todos os resultados, visto que em cada iteração do for, ocorreria uma troca do atual com o menorSalario.

Espero que tenha conseguido te auxiliar. Verifique como ficaria o código abaixo:

public static void main(String[] args) {

        double salario[] = new double[4];
        salario[0] = 3200; 
        salario[1] = 6000;
        salario[2] = 5000;
        salario[3] = 2200;

        int atual; 
        int menorSalario = 0; 
        int maiorSalario = 0;

        for(atual = 0; atual <= 3; atual++) {
            if (salario[atual] < salario[menorSalario]) {
                menorSalario = atual;
                } 
            }

        System.out.println("Posição no array do menor salário: " + menorSalario); 
        System.out.println("Menor salário é: " +salario[menorSalario]);

    }

Tente fazer com o maiorSalario e verifica se dá certo. Espero ter ajudado!

Uaaal, ajudou demais Leonardo, muito obrigada. Achei que era algo muito mais difícil...haha Fiquei feliz em ver que o erro era pequeno e "bobo". Achei que deveria usar "for(atual = 0; atual <= 4; atual++)" por conta que declarei aqui "double salario[] = new double[4]" serem 4, mas é como vc disse, e eu no momento não prestei atenção, é declarado 4 porque ele conta a partir do Zero. Com relação ao sysout, eu sabia que estava no lugar errado, eu apenas tinha deixado ele ali, para me dar um auxilio, mas acho que no final, ele mais atrapalhou do que ajudou...haha

Com relação ao maiorSalario, eu consegui fazer. Vou deixar aqui, para caso alguem tambem tenha essa duvida, mas deu certinho.

public static void main(String[] args) {

double salario[] = new double[4]; salario[0] = 3200; salario[1] = 6000; salario[2] = 5000; salario[3] = 2200;

int atual; int menorSalario = 0; int maiorSalario = 0;

for(atual = 0; atual <= 3; atual++) { if (salario[atual] < salario[menorSalario]); menorSalario = atual; } System.out.println("Posição no array do menor salário: " + menorSalario); System.out.println("Menor salário é: " + salario[menorSalario]);

for(atual = 0; atual <= 3; atual++) { if(salario[atual] > salario[maiorSalario]){ maiorSalario = atual; } } System.out.println("Posição no array do maior salário: " + maiorSalario); System.out.println("Maior salário é: " + salario[maiorSalario]); }

Novamente, muitíssimo obrigada Leonardo. Ajudou demais.