Forumdelen sponsras av

Hjälp med java metod som tar in en string parameter som kollar om det angivet värdet finns redan i ArrayListan eller inte

Trädvy Permalänk
Medlem
Registrerad
Aug 2018

Hjälp med java metod som tar in en string parameter som kollar om det angivet värdet finns redan i ArrayListan eller inte

// Min uppgift är att koda metoden läggaTillFågel (String art, String plats). Programmet bör endast kunna lagra en viss fågelart. Det vill säga, om fågelskådaren redan har lagt till fågelarterna "svan" till ArrayList, kommer det inte att vara möjligt att lägga till en ny "svan" till samlingen.

jag har skrivit så länge försökt att skriva detta men det verkar att metoden lägger till en ny fågelart trots att den finns redan i listan, metoden gör inget kontroll.

public void läggTillFågel(String art, String plats){
boolean hittad = false;

for (int i = 0; i < fågelLista.size(); i++){
if(fågelLista.equals(i)){
hittad = true;
}
}
if(hittad)
{
System.out.println("Fågeln fanns redan i listan");
}
else {
Fågel fågel = new Fågel (art, plats);
fågelLista.add(fågel);
System.out.println("En ny fågel har lagts till");

}
}

Trädvy Permalänk
Medlem
Plats
Blentarp
Registrerad
Jun 2011

Testa att använda ett "Set" istället för en ArrayList. Ger dig ganska trevliga egenskaper om du inte måste använda just en ArrayList:

https://docs.oracle.com/javase/7/docs/api/java/util/Set.html

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Sep 2003

Du kanske menar

if(fågelLista[i].Art == art) { Hittade = true; }

eller

if(fågelLista[i].Art.equals(art)) { Hittade = true; }

Fågel är väll en klass som innehåller namnet på fågeln, den exponerar förmodligen en Funktion/Metod/Property där man kan hämta namnet, exempelvis Art. Jag vet inte vilken språk det handlar om, kanske C#?

Edit: Java var det visst

1: Intel i7-3930K | 32GB Corsair Dominator GT | Asus Rampage IV Extreme x79 | 2 x 1080 GameRock Premium 8GB | 2 x Samsung Pro 840 512GB | Corsair AX1200i | BenQ XL2411 24" / W1070 135" | Bose QC25 | Windows 10 Pro x64 | HTC Vive |
2: Intel Core i7-4700HQ | 32GB RAM | Intel HM87 Express | GTX 780M | 17" | Windows 10 x64 |

Trädvy Permalänk
Medlem
Registrerad
Aug 2018

det är java oop

@Dalton Sleeper:

tack för din svar, men metoden funkar fortfarande inte. Jag får ett felmeddelande som talar om att jag har fel i if statement.

metoden som hämtar värdet Art heter getArt()

public void läggTillFågel(String art, String plats){
boolean hittad = false;
for (int i = 0; i < fågelLista.size(); i++){
if(fågelLista[i].Art.equals(art)) // här får jag felmeddelandet (array required, but java.util.ArrayList<Fågel> found)
{
hittad = true;
}

}
if(hittad)
{
System.out.println("Fågeln fanns redan i listan");
}
else {
Fågel fågel = new Fågel (art, plats);
fågelLista.add(fågel);
System.out.println("En ny fågel har lagts till");

Trädvy Permalänk
Medlem
Plats
Mora
Registrerad
Jan 2011

Om du läser felmeddelanden så får du svaret.

array required, but java.util.ArrayList<Fågel> found

Om du sedan kollar upp vilka metoder som finns tillgängliga för arrayList så saknas equal och du använder inte get. https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList...

Du använder equals, vilket återfinns i array. https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.ht... Vilket är varför du får ett felmeddelanden där det står att array krävs, men java.util.ArrayList<Fågel> hittad.

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Mar 2011

De borde vara fågellista.get(i).equals(art)

Skickades från m.sweclockers.com

Desktop: Intel 4790K @ 4,7GHz, MSI 1080 ti SeaHawk EK X, ASUS Maximus VII Hero, 2x 500GB 850 EVO, 256GB Crucial MX100, 32GB 2133 HyperX, EVGA G2 850W, Custom Loop
Server: Synology DS918+
Laptop: Macbook Pro /w touchbar, i5 2,9GHz, 16GB, 512GB.