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

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