2010-12-15 12 views
7

Mam tablicy:Java: Tablica jeśli wszystko jedno

int tarningar[] = new int[5]; 

który przechowuje liczby. Gdy wszystkie liczby są takie same, system.out.println ("ok");

Jak mogę to zrobić?

+3

Brzmi jak możliwej lekcji. Co próbujesz? –

+0

if (tarningar [1] == tarningar [2] && tarningar [3] == tarningar [4]) .. ale potem brakuje mi tarningara [0] i to nie jest praca domowa :) – Karem

+1

oprócz braku 'tarningar [0] ] "to także nie sprawdza, czy wszystkie elementy są takie same - sprawdza tylko, czy elementy 1 i 2 są takie same, a elementy 3 i 4 są takie same. '{1, 2, 2, 3, 3}' przechodzą ten test. – Jesper

Odpowiedz

14
boolean flag = true; 
int first = tarningar[0]; 
for(int i = 1; i < 5 && flag; i++) 
{ 
    if (tarningar[i] != first) flag = false; 
} 
if (flag) System.out.println("ok"); 
+1

Powinieneś "przełamać", jeśli flaga pójdzie fałszywie - lub dodać ją do stanu pętli. – sje397

+2

Możesz to poprawić, dodając '&& flag' po' i <5'. –

+0

Niezły, dziękuję. – Karem

6

Wszystkie wartości są takie same odpowiada Wszystkie wartości są równe dowolnej wybranej wartości.

Po prostu wybierz jeden jako , numer referencyjny i porównaj wybraną wartość z wszystkimi innymi wartościami.

16
public class EqualArrayTest { 

    public static boolean isAllEqual(int[] a){ 
     for(int i=1; i<a.length; i++){ 
      if(a[0] != a[i]){ 
       return false; 
      } 
     } 

     return true; 
    } 

    public static void main(String[] args){ 
     System.out.println(isAllEqual(new int[]{2,2,2})); 
     System.out.println(isAllEqual(new int[]{2,2,1})); 
    } 
} 
+0

Możesz zacząć od i = 1, tak czy inaczej: kod jest łatwy do odczytania +1 – Ralph

+0

@Ralph tak, masz rację! –

+0

@Ralph jeśli stworzysz i = 1, to musisz sprawdzić, czy rozmiar tablicy> 1, może jeden element jest obecny w tablicy, a ten kod się nie powiedzie, jeśli i = 1 – Shadi

0

Proste rozwiązanie bez pętli (i stałej długości matrycy 5):

int v = tarningar[0]; 

if (tarningar[1] == v && tarningar[2] == v && tarningar[3] == v && tarningar[4] == v) { 
    System.out.println("All the same!"); 
} 
1
boolean isSame = true; 

for(int i = 1; i < tarningar.length; i++) { 
    if (tarningar[i] != tarningar[0]) { 
     isSame = false; 
    } 
} 

if (isSame) { 
    System.out.println("OK"); 
} 
4
import java.util.Arrays; 

/** 
* Don't take it serious. 
* But it works. 
*/ 
public class Demo { 

    public static boolean isAllSame(int... numbers) { 
     int[] firstItemArray = new int[numbers.length];   
     Arrays.fill(firstItemArray, numbers[0]); 

     return Arrays.equals(numbers, firstItemArray); 
    } 

    public static void main(String[] args) { 
     System.out.println(isAllSame(1,1,1,1)); 
     System.out.println(isAllSame(1,1,1,2)); 
    } 
} 
8

z Google Guava:

boolean allEqual = Sets.newHashSet(Ints.asList(tarningar)).size() == 1; 
+1

Pomysłowo używać zestawu, aby sprawdzić, czy wszystkie wartości są takie same. Nie pomyślałbym o tym. –

1

W Java 8 z strumień API:

Set<Integer> uniqueValues = Arrays.stream(tarningar) 
    .boxed() 
    .collect(Collectors.toSet()); 
boolean allEqual = uniqueValues.size() == 1; 

Jeśli użyto Integer[] zamiast int[] poniższych jest obsługiwany w języku Java 7 i przed:

// Integer[] tarninagr = ... 
Set<Integer> uniqueValues = new HashSet<>(Arrays.asList(tarningar)); 
boolean allEqual = uniqueValues.size() == 1;  
0

Oto bardziej zwięzłe Java 8 strumieni przykład:

Arrays.stream(tarningar).distinct().count() == 1 
Powiązane problemy