2017-10-20 14 views
1

Je suis nouveau à Java, alors veuillez accepter mes excuses. J'ai une liste de tableaux ordonnée, c'est-à-dire { 10, 10, 10, 10, 120, 120 }.Je vérifie que certains articles sont en bas, dans un arraylist

Comment puis-je boucle la liste pour vérifier l'int 10 sont placés au haut de la liste et int 120 sont placés au bas de la liste ?

J'ai essayé d'utiliser

for(int i=0; i<list.size(); i++){ 
    for(int j=0; j<list.size(); j++){ 

    } 
} 

mais c'est jusqu'où je pouvais obtenir/comprendre.

+3

Vous dites que vous avez ** un ** ordre ** c'est-à-dire ** un tableau ** trié. Maintenant, vous voulez vérifier si le tableau est ** trié ** correctement? Eh bien, bien sûr, il a été trié avant. Ou voulez-vous vérifier si un tableau ** inconnu ** est trié? – Zabuza

+0

En outre, vos boucles for ressemblent à celles que vous essayez de parcourir sur une ArrayList 2D, mais votre description décrit uniquement une ArrayList 1D – Taelsin

+2

Possible duplication de [Comment déterminer si une liste est triée en Java?] (Https: // stackoverflow .com/questions/3047051/comment-déterminer-si-une-liste-est-triée-en-java) – Zabuza

Répondre

0

Eh bien, si vous voulez vérifier si la liste est triée, vous pouvez comparer des éléments adjacents pour voir si la liste est toujours reste la même ou de plus en plus - quelque chose au milieu comme

if (list.get(i) > list.get(i + 1)) { 
    return false; 
} 
2

d'abord , vous utilisez deux boucles imbriquées. Ce n'est pas nécessaire dans votre cas, il suffit d'utiliser une seule boucle for. En outre, je vous recommande de ne pas concentrer votre test sur des valeurs spécifiques. Essayez de penser à un niveau plus élevé. Dans ce cas, vous devez tester que chaque élément de la liste est supérieur au précédent. Donc, vous devriez commencer par le second élément (index 1) et aller dans le tableau, en comparant chaque élément avec le précédent.

for (int i = 1; i < list.size(); i++) { 
    if (list.get(i) < list.get(i - 1)) { 
     System.out.println("list not properly ordered"); 
     return; 
    } 
} 

System.out.println("list correctly ordered"); 
return; 
+0

Ceci est une bonne réponse (+1) pour accéder à une liste basée sur un tableau, comme la liste dans le question. Il ne fonctionnera cependant pas bien pour les listes non-array, telles que 'LinkedList'. Pour de bonnes performances sur tous les types de listes, un «Iterator» doit être utilisé, par ex. en utilisant une boucle 'for' améliorée, comme indiqué dans [cette réponse] (https://stackoverflow.com/a/46857633/5221149). – Andreas

0

est ici une alternative au answer by @sirnino, en utilisant la boucle for améliorée.

L'avantage est qu'il fonctionnera bien, même sur les listes qui ne sont pas basées sur des baies, telles que LinkedList, puisqu'il utilise le Iterator, et non get(index).

int prev = Integer.MIN_VALUE; 
for (int value : list) { 
    if (prev > value) { 
     System.out.println("list not properly ordered"); 
     return; 
    } 
    prev = value; 
} 
System.out.println("list correctly ordered"); 
return;