/ / Besoin d’aide pour stocker des valeurs spécifiques d’un tableau à 2 dimensions - java, tableaux, tri, analyse

Besoin d'aide pour stocker des valeurs spécifiques d'un tableau à 2 dimensions - Java, tableaux, tri, analyse

J'ai donc un tableau en 2 dimensions qui ressemble à ce qui suit

    {1, 20}
{1, 14}
{2, 15}
{2, 67}
{3, 55}
{3, 24}
{4, 95}
{4, 23}

Ce que je dois faire est essentiellement de trouver le plus hautnombre dans la 2ème colonne qui correspond à chaque numéro donc pour 1 le nombre le plus élevé est 20, pour 2 le nombre le plus élevé est 67, etc ... J'ai donc essayé d'utiliser une boucle while qui ressemble à ceci

int count = 0;
int count2 = 0;

int[][] array = {1, 20}
{1, 14}
{2, 15}
{2, 67}
{3, 55}
{3, 24}
{4, 95}
{4, 23}
int[] storeMax = new int[4]

while (array[0][count] < array[count].length)
{
if (array[count][1] > storeMax[count2])
{
storeMax[count2] = degPerc[count][1];
count2++;
}
else
{
count++;
count2++;
}
}

J'y suis depuis un moment, mais je n'arrive pas à comprendre. Si quelqu'un pouvait m'aider, ce serait génial!

Réponses:

1 pour la réponse № 1

Comme je pense une solution qui est un peu différente de votre solution.

créer Map<Integer, Integer> map . stocker la clé en tant que première colonne et commencer à mettrevaleur en tant que deuxième colonne (si la clé existe déjà, vérifiez la valeur et si la valeur dans la carte est inférieure à la valeur actuelle, remplacez-la par la valeur actuelle). atlast vous obtiendrez votre sortie

public static void main(String[] args) {
int[][] array = { { 1, 20 }, { 1, 14 }, { 2, 15 }, { 2, 67 },
{ 3, 55 }, { 3, 24 }, { 4, 95 }, { 4, 23 } };

Map<Integer, Integer> map = new HashMap<Integer, Integer>();
System.out.println(array.length);
for(int i=0;i<array.length; i++)
{
if(map.get(array[i][0]) == null)
map.put(array[i][0], array[i][1]);
else
if(map.get(array[i][0]) < array[i][1])
{
map.put(array[i][0], array[i][1]);
}
}
System.out.println(map);
}

1 pour la réponse № 2

Si vous utilisez Java 8, vous pouvez utiliser le nouveau Map.compute méthode:

static int[][] array = { { 1, 20 }, { 1, 14 },
{ 2, 15 }, { 2, 67 }, { 3, 55 },
{ 3, 24 }, { 4, 95 }, { 4, 23 } };

public static void main(String args[]) {
Map<Integer, Integer> m = new HashMap<>();
for (int i = 0; i < array.length; i++) {
int value = array[i][1];
int key= array[i][0];
m.compute(key, (k, v) -> v == null ? value : Math.max(v, value));
}
}

0 pour la réponse № 3

Premièrement, la syntaxe correcte pour déclarer un tableau multiple comme celui-ci serait

int[][] array = {{1, 20},
{1, 14},
{2, 15},
{2, 67},
{3, 55},
{3, 24},
{4, 95},
{4, 23}};

Donc, il semble que vous soyez un peu peu familier aveccomment fonctionnent les tableaux multidimensionnels en java. Cela mériterait probablement d'être lu. Rappelez-vous simplement qu'un tableau multidimensionnel est juste un tableau qui stocke d'autres tableaux. La ligne

while (array[0][count] < array[count].length)

n'est probablement pas ce que vous voulez. Ce que vous voulez faire est de parcourir tout le contenu du tableau, en recherchant la valeur maximale (2ème colonne) pour chaque clé (1ère colonne). Essayez de faire une boucle comme ça.

int count = 0;
while(count < array.length){
count++;
}

Maintenant, vous savez que chaque entrée du tableau a une clé à l'index 0 et une valeur numérique à l'index 1, vous pouvez donc les vérifier comme ceci

int count = 0;
while(count < array.length){
int keyVal = array[count][0];
int numVal = array[count][1];
count++;
}

Enfin, votre échantillon de données n'a que le possiblevaleurs pour les clés de 1-4. Si tout ce qui se passe est 1-4, votre variable storeMax fonctionnera pour stocker les résultats. Sinon, vous voudrez utiliser une carte comme le dit Prashant dans les commentaires ci-dessus.

Donc, si les clés doivent toujours être comprises entre 1 et 4, vous pouvez alors effectuer une vérification de la boucle et les stocker.

while(count < array.length){
int keyVal = array[count][0];
int numVal = array[count][1];

if(storeMax[keyVal-1] < numVal){
storeMax[keyVal-1] = numVal;
}
count++;
}

Rappelez-vous que les tableaux sont basés sur 0. C’est pourquoi vous devez utiliser keyVal-1.