Vinnaren i pepparkakshustävlingen!
2019-08-09, 17:40
  #1
Medlem
Hej, försöker kolla om min userinput (breed) finns i en array för om den gör det ska svanslängden sättas till 3.7. Har inte fått de att funka o ser ut såhär för tillfället, och nu blir alla raser 3.7 inte bara dachshund och tax. Tack!
https://pastebin.com/GuQh8gWS
Citera
2019-08-09, 18:14
  #2
Medlem
DigiFlaxs avatar
Kod:
if (tailArray.equals(breed));{
  found = true;
}

Du har ett semicolon som inte ska vara där efter ditt if statement. Ta bort det så borde det funka.
Citera
2019-08-09, 19:27
  #3
Medlem
Citat:
Ursprungligen postat av DigiFlax
Kod:
if (tailArray.equals(breed));{
  found = true;
}

Du har ett semicolon som inte ska vara där efter ditt if statement. Ta bort det så borde det funka.

Nope, då blir inget 3.7 istället haha
Citera
2019-08-09, 20:23
  #4
Medlem
supremanics avatar
Du kan ju inte jämföra hela arrayen som helhet med ditt värde. Loopa igenom den och jämför värde för värde
Citera
2019-08-14, 23:56
  #5
Medlem
Blankts avatar
Är lite sen, men om du vill slippa använda massa for loopar kan du använda streams.

Kod:
  String[] tailArray = {"Tax", "Dachshund", "tax", "dachshund"};
     Stream<String> stringStream = Arrays.stream(tailArray);

 boolean flag = stringStream.anyMatch(i -> i.equals(breed));


      if(flag) {
           length = 3.7;
      }
      else  {
         length =  (double) age *  weight / 10.0;
      }
Citera
2019-08-16, 21:26
  #6
Medlem
z0mfg(ish)s avatar
En annars gångbar lösning där man slipper arrayer (men det kanske är ett krav?) och är något kortare:
Kod:
public double getTailLength() {
    if(
breed.equalsIgnoreCase("Tax") || breed.equalsIgnoreCase("Dachshund") {
        return 
3.7;
    } else {
        return (double) 
age weight 10.0;
    }

Citera
2019-08-20, 02:53
  #7
Medlem
Som nämnt tidigare så är det denna kod som är fel:

Kod:
if (tailArray.equals(breed));{
  found = true;
}

Din kod ser egentligen ut så här:

Kod:
    public double getTailLength() {
        String[] tailArray = {"Tax", "Dachshund", "tax", "dachshund"};
        boolean found = false;


        
        // denna rad försöker alltså jämföra om värdet i variablen 
        //breed är detsamma som hela arrayen.
        // Detta kommer alltid att resultera i false. Men eftersom
       // Du har ett semicolon efter så tar din if-sats slut här.
        if (tailArray.equals(breed)); // detta är ett enstaka statement 
        
        {
            // Denna kod kommer ALLTID att köras. 
            // Att du har brackets gör bara att du hamnar i ett annat scope
            // Annat scope innebär att alla variabler du deklarerar här inne 
            // kommer att förstöras när du lämnar scopet. Du deklarerade found utanför, 
            // men denna kommer alltid sättas till true.
            found = true;
        }

        if (found) {
            length = 3.7;
        }
        else {

            // Detta kommer aldrig att köras
            length =  (double) age *  weight / 10.0;
        }
        return length;
 
    }

För att fixa testa så måste du som tidigare påpekat, loopa igenom arrayen och jämföra värde efter värde.

Lättast att göra det för en nybörjare är att använda en foreach-loop. En for-eachloop är att föredra eftersom du inte behöver ett index som finns i en for loop, då är för each lättare. Du kan även som andra påpekat använda streams som är lite mer avancerat och kraftfullare. Vill du vara riktigt vild och kalen så kan du använda rekursion.

Men här använder jag en foreach loop. Jag sätter length till ett defaultvärde. Vi går igenom arrayen steg för steg och jämför, hittar vi då ändrar vi värdet bryter ur loopen och returnerar. Får vi ingen träff ja då returnerar vi vårat defaultvärde.

Kod:
    public double getTailLength() {
        String[] tailArray = { "Tax", "Dachshund", "tax", "dachshund" };
        double length =  (double) age *  weight / 10.0;
        for (String value : tailArray) {
            if (breed.equals(value)) {
                length = 3.7;
                break;
            }
        }
        return length;
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback