webForumDet fria alternativet

returnera forloop?

9 svar · 398 visningar · startad av hema80

hema80Medlem sedan sep. 2004151 inlägg
#1

Jag har gjort en container-klass som håller Objekt i en Vector, klassen tillhandahåller metoder för att lägga dit, söka objekt samt skriva ut.

Det är söka objekt, alltså metoden search, som jag har problem med. Resultaten lagras i en array. När metoden kallas på så vill jag inte att arrayen ska skrivas ut för då ser det underligt ut:

Exempel från min testklass_______________________
Testar metoden search.

Söker på "Det"[Book@1bab50a, Cd@c3c749]
____________________________________________

Jag vill att det ska skriva ut snyggare och testar därför att returnera en iterator version av for loopen, se metoden search nedan.

Men det fungerar inte. Kompilatorn säger "illegal start of expression".

Jag är än så länge nybörjare på Java så ...

Nån idé?

//***********************************************************
// Class MediaContainer
//
// Metoder: Constructor, addMedia, seach, print
//***********************************************************

import java.util.*;

class MediaContainer
{
private Vector catalogue;

//-----------------------------------------------------------
// Constructor - Sätter upp den vektorn vilken kan innehålla
// ett obestämt antal objekt av typen media.
//-----------------------------------------------------------
public MediaContainer()
{
catalogue = new Vector();
}

//-----------------------------------------------------------
// addMedia - lägger till ett media i katalogen.
//-----------------------------------------------------------
public void addMedia (Media newMedia)
{
catalogue.addElement (newMedia);
}

//-----------------------------------------------------------
// seach - söker efter ett medias titel i katalogen.
//-----------------------------------------------------------
public Vector search (String title)
{
Vector match = new Vector();

for(int i = 0; i \< catalogue.size(); i ++)
{
	if ( ((Media)catalogue.elementAt(i)).getTitle().equals(title) )
	{
		match.addElement (catalogue.elementAt(i));
	}
}

return for (Vector value : match)
	System.out.print (value + "    ");

}

//-----------------------------------------------------------
// print - skriver ut alla medier i katalogen.
//-----------------------------------------------------------
public void print()
{
System.out.println ("----- Medier i katalogen -----");
for(int i = 0; i < catalogue.size(); i++)
{
((Media)catalogue.elementAt(i)).print(); // Anropar metoden print i Media
}
}

} //----- Slut class MediaContainer -----

missModestyMedlem sedan apr. 2005228 inlägg
#2

När du skriver "public Vector search()" så säger det att metoden ska returnera en vektor. Du försöker returnera en forloop som inte är samma sak. Låt metoden returnera vektorn och skriv istället en metod som skriver ut resultatet så som du vill att det ska se ut och anropa den när du vill att resultatet ska visas.

hema80Medlem sedan sep. 2004151 inlägg
#3

Jag ska alltså skriva en metod som skriver ut resultatet, låt oss kalla den metoden searchPrint.

I min testklass när jag vill utföra sökningen - ska jag då anropa metoden search eller metoden searchPrint? Det går ju inte ihop juh.

Du vill inte visa med ett exempel?

Tack för hjälpen också :)
Jag uppskattar hjälpen trots att jag låter en smula frustrerad. Har hållt på med detta hela dagen.

PeWMedlem sedan juni 20006 839 inlägg
#4

Hehe... *förlåt*. Men du kan inte "returnera en forloop". En "for" är ett statement inte ett value eller object.

missModestyMedlem sedan apr. 2005228 inlägg
#5

Vector result = search("ngt");
searchPrint(result);

public void searcPrint(Vector v) {
for (i= 0; i != v.size(); i++) {
system.out.println( vad du nu vill ha utskrivet);
}

Vet inte om det hjälper...

hema80Medlem sedan sep. 2004151 inlägg
#6

Eh jag förstår inte ...

Tack ändå.

Förresten du har inte icq eller msn kanske? Kunde ta det där. Jag vill verkligen lösa detta, men det är jätte svårt såhär via ett forum. Du ser inte hela min kod heller eller vet vad jag vill med programmet. Och jag är bara nybörjare på Java.

hema80Medlem sedan sep. 2004151 inlägg
#7

Alltså jag ska skapa en ny metod som behandlar data från metoden search? Variablarna där i kommer man inte åt utanför den metoden för det första ...

Kommer jag åt det den returnerar, alltså match?

Försöker med en sån här metod:
___________________________________
public void search ()
{
Vector resultat = new Vector();

resultat = search2();

for (Vector value : resultat)
System.out.print (value + " ");
}
____________________________________
Får kompileringsfel

Försöker med en sån här metod:
___________________________________
public void search ()
{
Vector resultat = new Vector();

resultat = match();

for (Vector value : resultat)
System.out.print (value + " ");
}
____________________________________
Får kompileringsfel.

Hur kommer jag åt resultatet av sökningen i en metod som finns i samma klass som metoden som gör sökningen? Ska jag skapa ett objekt av klassen jag är i eller vad?

missModestyMedlem sedan apr. 2005228 inlägg
#8

Du kan dela upp det i två metoder. Då blir det något i stil med:

public Vector search (String title)
{
    Vector match = new Vector();

    for(int i = 0; i < catalogue.size(); i ++)
	{
	    if ( ((Media)catalogue.elementAt(i)).getTitle().equals(title) )
		{
		    match.addElement (catalogue.elementAt(i));
		}
	}

    return match;
}

public void showResult(Vector r)
{
    for(int i = 0; i != r.size(); i++)
	System.out.print(r.elementAt(i).print() + " ");
}
missModestyMedlem sedan apr. 2005228 inlägg
#9

Egentligen har jag druckit för många öl för att svara på frågan. Men jag såg precis att du enligt beskrivningen över metoden bara söker ett objekt. Varför returnerar du inte istället ett index till var i den ursprungliga vektorn som objektet ligger?

public int search (String title)
{
    int found = -1;

    for(int i = 0; i < catalogue.size(); i ++)
	{
	    if ( ((Media)catalogue.elementAt(i)).getTitle().equals(title) )
		{
		     found = i;
		}
	}

    return found;
}

Och om found = -1 så betyder det att objektet inte finns. Annars kan man plocka det från catalogue.

Som du sedan försökt skriva metoden så ser det ut som om du är ute efter att skriva ut en lista över fler objekt som matchar title. Vill du bara göra det så kan du istället skriva:

public void search (String title)
{
    String match = "";

    for(int i = 0; i < catalogue.size(); i ++)
	{
	    if ( ((Media)catalogue.elementAt(i)).getTitle().equals(title) )
		{
		    match = match + catalogue.elementAt(i)).getTitle() + " " ;
		}
	}
    if(match == "")
         System.out.println("Item not found");
    else
        System.out.println(match);
}
hema80Medlem sedan sep. 2004151 inlägg
#10

Nej nej nej nej det fungerar inte alls. :)
Kompilatorn går bärsärk.

Jag vet inte om du förstår hur jag menar. En array ska returneras men den ska skrivas ut snyggare. Tex just nu får jag [Cd@1bc4459] om jag söker på "REM".

Kanske ska göra den snyggare i testklassen istället då? Alltså den klass där jag kallar på metoden search?

Jag vet inte ... Detta är way out of my league. Men jag ska lösa det!

Så va det löst! :)

System.out.println ("Söker på \"Det\"" + ": " + katalog.search ("Det").size() +
" stycken medier funna.");

Genererad på 380 ms · cache AV · v20260730165559-full.f96bc7eb