Permalänk
Medlem

Sökmetod i java.

Hej. Jag sitter och försöker klura ut hur jag ska göra en sökmetod för min lilla "TigerFarm" jag sitter och pysslar med. Koden är följande:

import java.util.ArrayList; /** * Write a description of class Tiger here. * * @author (your name) * @version (a version number or a date) */ public class TigerFarm { // instance variables - replace the example below with your own private ArrayList <Tiger> TigerFarm; public TigerFarm() { TigerFarm = new ArrayList <Tiger>(); } public void addNewTiger(String name, int age, int weight, int length) { Tiger newTiger = new Tiger(name, age, weight, length); TigerFarm.add(newTiger); } public void addTiger() { addNewTiger("Simba", 4, 10, 90); addNewTiger("Mufasa", 40, 105, 140); addNewTiger("Scar", 55, 70, 150); addNewTiger("Namira", 22, 56, 120); addNewTiger("Skreta", 80, 55, 38); } public void showInfo() { int index = 0; while(index < TigerFarm.size()) { System.out.println(index + 1 + ". " + "Name: " + TigerFarm.get(index).getName()+ "\n" + " Age: " + TigerFarm.get(index).getAge() + "\n" + " Weight: " + TigerFarm.get(index).getWeight() + " kg" + "\n" + " Lenght: " + TigerFarm.get(index).getLenght() + " cm" + "\n-----------------\n"); index++; } } public void searchForTiger() { boolean searchphrase = false; int i = 0; if(searchphrase == true) System.out.println(i + 1 + ". " + "Name: " + TigerFarm.get(i).getName()+ "\n" + " Age: " + TigerFarm.get(i).getAge() + "\n" + " Weight: " + TigerFarm.get(i).getWeight() + " kg" + "\n" + " Lenght: " + TigerFarm.get(i).getLenght() + " cm" + "\n-----------------\n"); i++; } public void removeTiger() { } }

Som ni ser är min sökmetod "broken" och jag lyckas inte lista ut hur jag ska gå till väga för att få den att fungera. Målet är att använda "name" som sökord.
Tack på förhand.

Visa signatur

gg

Permalänk
Medlem

public void searchTigerByName(String name){
for(Tiger tiger : TigerFarm){
if(tiger.getName().equals(name)){
System.out.println("Found tiger " + tiger.getName() + " age : etc etc etc");
}
}
}

Permalänk
Medlem
Skrivet av eaan:

public void searchTigerByName(String name){
for(Tiger tiger : TigerFarm){
if(tiger.getName().equals(name)){
System.out.println("Found tiger " + tiger.getName() + " age : etc etc etc");
}
}
}

Tack ska du ha!

Visa signatur

gg

Permalänk
Medlem

En till fråga. Jag vill ha en metod för removeTiger men lyckas inte lösa det heller? Har provat med for-each men får det ej att fungera. Vore trevligt med tips.

Visa signatur

gg

Permalänk
Medlem
Skrivet av BigPinky:

Hej. Jag sitter och försöker klura ut hur jag ska göra en sökmetod för min lilla "TigerFarm" jag sitter och pysslar med. Koden är följande:

Som ni ser är min sökmetod "broken" och jag lyckas inte lista ut hur jag ska gå till väga för att få den att fungera. Målet är att använda "name" som sökord.
Tack på förhand.

Tjo, liten grej, bör vara tigerFarm och inte TigerFarm Samt private List<Tiger> istället för ArrayList, inte för att det spelar så stor roll nu, men bra vana

Din showInfo skulle bli mycket snyggare om du gjorde en egen toString i Tiger istället för att ha detta där det är nu.
Om du gör d skulle d bli så här enkelt typ:

for(Tiger tiger : tigerFarm){ syso(tiger); }

En lite "bättre" sökjämförelse vore att köra t.ex. contains istället för equals, samt ignore case ^^

Skrivet av BigPinky:

En till fråga. Jag vill ha en metod för removeTiger men lyckas inte lösa det heller? Har provat med for-each men får det ej att fungera. Vore trevligt med tips.

Lättaste sättet att göra remove är att använda lists egen remove metod, det kräver dock att du implementerar equals för din Tiger klass, lättast är att låta din IDE generara equals och hashcode för din klass så kan du använda alla finesser som finns i Lists och Maps.

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem
Skrivet av Gnejs:

Tjo, liten grej, bör vara tigerFarm och inte TigerFarm Samt private List<Tiger> istället för ArrayList, inte för att det spelar så stor roll nu, men bra vana

Din showInfo skulle bli mycket snyggare om du gjorde en egen toString i Tiger istället för att ha detta där det är nu.
Om du gör d skulle d bli så här enkelt typ:

for(Tiger tiger : tigerFarm){ syso(tiger); }

En lite "bättre" sökjämförelse vore att köra t.ex. contains istället för equals, samt ignore case ^^

Lättaste sättet att göra remove är att använda lists egen remove metod, det kräver dock att du implementerar equals för din Tiger klass, lättast är att låta din IDE generara equals och hashcode för din klass så kan du använda alla finesser som finns i Lists och Maps.

Tack för svaret. Dock så är jag nybörjare och hänger med på hälften av det du precis beskrev. Läser nämligen objektorienterad programmering på A-nivå.
Så jag behöver som tur är inte kunna allt du beskrev...

Visa signatur

gg

Permalänk
Hedersmedlem

Om man går ifrån lite att mappa verkliga saker till klasser, dvs. göra en Tiger-klass för tigrar en sak sak så kan man ju istället använda en gränssnittet Map<String,TigerData> med LinkedHashMap<String,TigerData> för att lagra informationen.

Nyckeln i bindningen är alltså namnet på tigrarna och TigerData är en liten klass som håller längd, vikt och ålder.
Så man kan skriva tigers.remove ("Shere Khan") för att ta bort och tigers.get ("Shere Khan") för att hitta en tiger.

Och som sagt det är inte klassen TigerFarms uppgift att beskriva vad en tiger har för egenskaper, det får tigern själv göra. Använder man mitt ovanstående sätt med en Map så kan den inte göra det (eftersom TigerData inte vet vad den heter) men å andra sidan har tigrar inga namn förutom när de hålls hos människor, i t.ex. en "tigerfarm". Så det skulle vara okej att TigerFarm berättar namnet (att skrivat till stdout) och sedan förfrågar TigerData om just datauppgifterna för en tiger.

Visa signatur

Forumregler | Feedbackforumet | Något som behöver modereras? Tryck på Anmäl inlägget och ge en anledning, någon moderator kommer granska inlägget och göra (egen) bedömning
"Fate. Protects fools, little children and ships named Enterprise." - Riker - ST:TNG

Permalänk
Medlem

Angående arv. Finns det någon "remove."-metod för att "removea" i TigerFarm-klassen från en subklass som t.ex tiger eller lejon?

Vad jag menar är om min remove-metod kan göras om så att den tar bort från en specifik subklass. Har nämligen försökt att använda samma metod men inget händer när man kör metoden...

Visa signatur

gg