2011-11-04, 15:58
  #1
Medlem
Skulle behöva lite hjälp.
Ska ska med hjälp av "boolean" avgöra om alla element i en array har samma värde.
Tyvärr har jag dålig koll på hur funktionen boolean ens fungerar.
Antalet element i arrayen beror på indatan.
Någon som kan ett bra sätt att göra detta?
Citera
2011-11-04, 16:01
  #2
Medlem
nu är jag inte direkt high på java men boolean är iallafall en variabel vars värde är antingen 1 eller 0, true eller false, på eller av.
Citera
2011-11-04, 16:15
  #3
Medlem
tj.s avatar
Kod:
bool is_same false;
for(
int i=0i<arraylengthi++){ //orkar inte googla upp hur man får fram längd på array i java...
    
for(int j=0j<ij++){
        if (array[
i] == array[j]){
            
is_same true
            
break;
        }
    }


Där har du ett enkelt exempel på hur man kan jämföra element i en array med hjälp av bool.
Citera
2011-11-04, 17:59
  #4
Medlem
kelebs avatar
Citat:
Ursprungligen postat av tj.
Kod:
bool is_same false;
for(
int i=0i<arraylengthi++){ //orkar inte googla upp hur man får fram längd på array i java...
    
for(int j=0j<ij++){
        if (array[
i] == array[j]){
            
is_same true
            
break;
        }
    }


Där har du ett enkelt exempel på hur man kan jämföra element i en array med hjälp av bool.

Det där kommer ju att returnera true även om bara två element av fler än två är samma.

TS: boolean är ingen funktion utan en datatyp som kan ha antingen värdet true eller värdet false. I C(++/#) kan även 1 och 0 tolkas som true resp. false men inte i Java. Det du alltså vill göra är att m.h.a. en boolean visa om antingen alla element i en array är desamma (med att sätta en boolean till true) eller om minst ett av elementen i arrayen är annorlunde (med att sätta en boolean till false). Din kod stoppar du in i en metod som då returnerar en boolean till den som anropar funktionen. Värdet på denna boolean som returneras bestämmer du i funktionen.

Kod:
public boolean isAllTheSame(Object[] objectArray){
  
boolean returnValue;  
  
//Kod för att bestämma som variabeln returnValue ska vara true eller false
  
return returnValue;


Hur koden ska se ut är ju din uppgift att skriva men jag ska peka dig i en riktning där du kan hitta svaren. Det finns en klass i Java som heter Arrays. Denna klass är utmärkt för att göra saker med arrayer. Du kan läsa om klassen här:
http://download.oracle.com/javase/7/...il/Arrays.html
Jag skulle använda mig utav en av följande metoder (inte Java-metoder nu, utan metod som i lösning).

Antingen att titta på första elementet och sedan loopa igenom arrayen och titta på elementen ett i taget. Om elementet är detsamma fortsätter vi och kolla på nästa. Är elementet inte detsamma som det första elementet avbryter vi och sätter returnValue till false. Kommer vi igenom hela arrayen utan att ha avbrutit sätter du returnValue till true. Detta är vad tj. försökte åstadkomma men misslyckades med.

Använd metoden equals som finns i alla klasser för att avgöra om två element är lika. Att använda två lika med tecken ( == ) fungerar bara på de primära datatyperna.
Kod:
firstElement.equals(anElementInTheArray);

Alternativt, titta på första elementet och därefter titta på hur lång arrayen är. Sedan skapar jag en ny array som är lika lång som den första och sätter alla element i den nya arrayen till det första elementet. Då har jag en array som den jag "vill" att den första arrayen ska vara. Sedan jämför jag helt enkelt de båda arrayerna. Är de likadana sätter jag returnValue till true och är de det inte sätter jag returnValue till false.
Kod:
int arraylength = anArray.length; //heltalet arraylength kommer att vara lika med längden på arrayen anArray
Arrays.fill(anotherArray, value); //sätter alla element i arrayen anotherArray till värdet value
boolean theSame = Arrays.equals(arrayOne, arrayTwo); //din boolean theSame (kan bytas ut mot returnValue) kommer att sättas till true om de två arrayerna arrayOne och arrayTwo är lika långa och innhåller samma element på samma plats, i annat fall kommer den sättas till false.

Den första lösningen är effektivare att köra men kräver lite mer kodskrivande själv. Den andra är lite mindre effektiv men kan vara lite lättare att förstå.
Citera
2011-11-04, 18:06
  #5
Medlem
Den loopen fungerar inte alls för mig tj. Den ger endast "true".
__________________
Senast redigerad av 1337kr 2011-11-04 kl. 18:11.
Citera
2011-11-04, 18:08
  #6
Medlem
Tack keleb. Ska testa detta.
Citera
2011-11-04, 18:22
  #7
Medlem
gadzooxs avatar
Peta in alla element i arrayen i ett HashSet och kolla sedan om dess .size() <= 1?
Citera
2011-11-04, 18:23
  #8
Medlem
tj.s avatar
Citat:
Ursprungligen postat av 1337kr
Den loopen fungerar inte alls för mig tj. Den ger endast "true".
Ja, för att den returnerar true om bara två element är desamma. Observera att det var ett enkelt exempel för att du skulle förstå principen...
Citera
2011-11-04, 20:11
  #9
Medlem
Varför inte:

Kod:
public boolean allaÄrSamma(Object[] array) {
    for (int i = 1; i < array.length(); i++) {
        if (array[0] != array[i]) {
            return false;
        }
    }
    return true;
}
Citera
2011-11-06, 20:41
  #10
Medlem
Citat:
Ursprungligen postat av gadzoox
Peta in alla element i arrayen i ett HashSet och kolla sedan om dess .size() <= 1?

Finaste lösningen :-)

Edit: Se dock till att implementera equals (eller låt eclipse göra det åt dig) om du inte använder en class där det redan är implementerat.
__________________
Senast redigerad av isato 2011-11-06 kl. 20:44.
Citera
2011-11-06, 20:46
  #11
Medlem
Citat:
Ursprungligen postat av HugeSackOfNachos
nu är jag inte direkt high på java men boolean är iallafall en variabel vars värde är antingen 1 eller 0, true eller false, på eller av.

En boolean kan aldrig bli 1 eller 0 i java utan är "true" eller false:

boolean test = true;
if( test == 1 )


Som ovan kan man inte göra i java.
Citera
2011-11-09, 18:16
  #12
Medlem
Sigrid80s avatar
Citat:
Ursprungligen postat av Fibbe_15
Varför inte:

Kod:
public boolean allaÄrSamma(Object[] array) {
    for (int i = 1; i < array.length(); i++) {
        if (array[0] != array[i]) {
            return false;
        }
    }
    return true;
}

^This.

Vill du göra det ännu tydligare använder du en for-each loop istället.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in