Como referenciar arrays

Olá, sou iniciante em java e preciso fazer um exercício onde eu acho que fazer de uma certa maneira fica mais fácil, mas não sei fazer isso em java, apenas em php. Então por exemplo se eu quero dar um nome ao índice (ou referencia-lo, não sei qual é a expressão correta a se usar) ficaria mais ou menos assim em php:

$nomes = Array ["Aluno" => "Fulano"];

“Aluno” seria o índice e “Fulano” o valor passado a esse índice correto?

Então eu gostaria de saber se existe alguma maneira do tipo pra fazer isso em java? Seja ela parecida ou bem diferente.

1 curtida

No java, creio que seria usando um mapa:

Map<String, String> nomes = new HashMap<String, String>();
nomes.put("Aluno", "Fulano");

Para pegar o valor pelo índice:

System.out.println(nomes.get("Aluno")); // Fulano
2 curtidas

Ah sim, valeu achei interessante essa questão dos mapas.

Mas o exercício pede pra eu ler 10 nomes, e atribuir notas a esses nomes e depois ordena-los de forma decrescente.
E como é um exercício de arrays, eu deveria fazer isso em array.

Ordenar os notas ou os nomes de forma decrescente?

O exercício fala para ordenar os nomes pelas notas.

Como voce ja fez?

Eu apenas criei um array para nomes e outra para notas, agora estou procurando uma maneira de ligar as duas variaveis.

A dica do lucas foi boa, mas tenho que fazer isso com arrays :s

Cara é simples você precisa de um array multidimensional.
float[][] notas = { {8.0, 7.5, 8.5, 9.0, 8.0 }, {8.9, 9.0, 8.6, 8.4, 8.0 } }; Array 2 por 5

thevalter, acho que não é só isso. Ele quer ordenar os nomes pelas notas em ordem decrescente. A questão é como você iria associar Strings com Floats numa matriz? Acho que não seria possivel colocar os dois tipos numa matriz. Então ele quer criar um array com um tipo double/float para as notas[], e outro vetor/array para os nomes[]. Agora como associar ambos e exibir de forma decrescente? Já que o Desafio é fazer com Vetor[], teria que pensar nas possibilidades. Com outros tipos seria bem mais facil, ArrayList, Vector, por ex, pois já tem os metodos para isso. Fiz aqui rapido bigbossp, a ordenação da forma decrescente das notas, está ok. Agora falta associar as notas aos nomes.

public class Aluno {
public static void main(String args[]) {
Scanner entrada;
double notas[] = new double[10];
String[] nomes = new String[10];
double aux;
int i, j;
int cont = 0;

 while (cont<10) {
    entrada = new Scanner(System.in);
    System.out.println("Cadastro "+cont);
    System.out.print("Digite o nome do aluno: "+cont); nomes[cont] = entrada.nextLine();
    System.out.print("Digite a nota: "); notas[cont] = entrada.nextInt();
    cont++;
 }
 for (i=0;i<10;i++) { for (j=0;j<9;j++) { 
     if (notas[j] < notas[j+1]) { 
         aux = notas[j];
         notas[j] = notas[j+1];
         notas[j+1] = aux;
         }
      }
   }        
 System.out.println("\nVetor ordenado de forma decrescente");
 for (i=0;i<10;i++) { 
   // System.out.println("Aluno: "+nomes[i]+" - "+"Nota: "+notas[i]);
   System.out.println("Nota: "+notas[i]);
  }

}
}

1 curtida

Você pode criar classes para resolver esse exercício? Se sim, dá para criar uma classe aluno com os atributos nome e nota, por exemplo. Com isso você poderia ter um array de alunos.

2 curtidas

Obrigado pelas dicas e ajudas, vou ver aqui e tentar fazer com classes então!

1 curtida

Cara eu fiz assim aqui utilizando matrix para as notas e array para os nomes, tipo o indice do array de nomes tem o numero da linha na matrix parece banco de dados tipo um id. O if é para controle pois a cada loop eu so quero um nome.

Porem o problema aqui é ordenar decrescente fica complicado nada impossivel haha

A ideia das classes também é boa.

boolean isNota;
        Scanner entrada;
        
        int[][] Notas = new int[3][2];
        String[] nomes = new String[3];
        
        for (int linha = 0; linha < 3; linha++) {
            isNota = true;
            for (int coluna = 0; coluna < 2; coluna++) {
                entrada = new Scanner(System.in);

                if(isNota){
                    System.out.print("Digite o nome do aluno: " + linha);
                    nomes[linha]=entrada.nextLine();
                    isNota = false;
                }    

                System.out.print("Digite a nota: ");
                Notas[linha][coluna] = entrada.nextInt();
            }
            
        }
                
        for (int linha = 0; linha < 3; linha++) {
            isNota = true;
            for (int coluna = 0; coluna < 2; coluna++) {

                if(isNota){
                    System.out.println("O Aluno " + nomes[linha] + " Tem as Notas: ");
                    isNota = false;
                }

                System.out.println(Notas[linha][coluna]);
            }
        }

Valeu cara, ajudou bastante!

Boa noite,

Se for o que estou pensando daria para resolver dessa forma:

    HashMap<String, Double> notas = new HashMap<>();
    notas.put("aluno1", 9.0);
    notas.put("aluno2", 10.0);
    notas.put("aluno3", 9.5);
    notas
        .entrySet()
        .stream()
        .sorted(Entry.comparingByValue())
        .forEach(System.out::println);

Output:

aluno1=9.0
aluno3=9.5
aluno2=10.0

[]'s

O problema pode ser resolvido de diversas formas. Mas tem que ser usando Array[] ou Vetor[]. Foi o que entendi

@Jonas_B_a_r_r_o_s, você tem razão, não havia reparado os comentários posteriores.