Permalänk
Medlem

Visa allt registrerat

Hej,

det är så att jag har skapat en person, samt registrerat övriga personer i en lista. Nu vill jag använda mig av ett kommando som visar allt som är registrerat i den listan.

Programmet är uppbyggt av ett kommando styrt användargränssnitt. Ungefär så här;

1. Registrera person
2. Visa alla registrerade personer
3. Avsluta

Min kod för att registrera personer ser ut så här:

void skapaPerson(){
String namn = readString("Skriv in den nya personens namn: ");
Person p = getPerson(namn);
if (p!=null)
System.out.println("Den personen du valt finns redan");
else{
Person ny = new Person(namn);
alla.add(ny);
}

Denna kod är sparad tillsammans med resten i klassen HProgram.

Har en klass som heter Person där metoden för att lägga till personerna i ett register. Den koden ser ut så här.

import java.util.*;
class Person{
private ArrayList<Prylar> allaPrylar = new ArrayList<Prylar>();

private String namn;

public Person(String namn){
this.namn = namn;
}

public String getNamn(){
return namn;

}

public void addPryl(Prylar ny){
allaPrylar.add(ny);
}
}

Nu undrar jag hur jag går tillväga för att visa allt som jag har registrerat. Har försökt diverse lösningar men kör hela tiden fast. Några tips skulle verkligen inte skada

Visa signatur

iCus

Permalänk

Gör en for-loop på din lista "alla"

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Provade det först men den skrev bara ut en tom lista. Registrerade först givetvis, därefter utförde jag kommandot visa allt.

Hmm..

Visa signatur

iCus

Permalänk
Citat:

Ursprungligen inskrivet av Mcus
Provade det först men den skrev bara ut en tom lista. Registrerade först givetvis, därefter utförde jag kommandot visa allt.

Hmm..

Visa mer kod då?

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

Får vi fråga hur koden ser ut för skriva ut? Då kanske vi kan pointa dig i rätt väg, vi vet ju inte dina skills på arrayer & stegningar, eller loopar för den delen

Edit, lite sent, så går det när man har 10 sidor i FF

Permalänk
Medlem

Sure thing

Här kommer all min kod i diverse olika klasser jag har.

Klassen HuvudProgram är huvudklassen och Prylar är en superklass till subklasserna Smycke, Apparat och Aktie. Klassen Person håller koden för att lägga till.

Jag hoppas detta ger bättre inblick.

Kom ihåg att jag inte vill ha lösningar utan redovisning. Alltså, jag vill inte bara få hjälp och sedan ingen förklaring till. Inget fusk här inte

HuvudProgram:

import java.util.*;
class HuvudProgram{
ArrayList<Person> alla = new ArrayList<Person>();
Scanner scan = new Scanner(System.in);

int readInt(String fraga){
for(;;){
try{
System.out.print(fraga);
int x=Integer.parseInt(scan.nextLine());
return x;
}
catch (NumberFormatException e){
System.out.println("Fel - skall vara numeriskt värde");
}
}
}

String readString(String fraga){
System.out.print(fraga);
String str=scan.nextLine();
return str;
}

Person getPerson(String namn){
for (Person p : alla)
if (p.getNamn().equalsIgnoreCase(namn))
return p;
return null;
}

void skapaPerson(){
String namn = readString("Skriv in den nya personens namn: ");
Person p = getPerson(namn);
if (p!=null)
System.out.println("Den personen du valt finns redan");
else{
Person ny = new Person(namn);
alla.add(ny);
}
}

void skapaPryl(){
System.out.print("\n");

Person p = getPerson(readString("Vilken person äger prylen: "));
if(p==null)
return;
System.out.print("\n");
int prylSort=readInt("Vilken sorts pryl: 1.Smycke, 2.Apparat 3.Aktie ");
Prylar ny=null;
switch(prylSort){
case 1:
boolean material;
String n = readString("Vilken sorts smycke: ");
int g=readInt(" 1.Guld \n 2.Silver \n");
while(!(g==1||g==2)){
g=readInt("Fel! Du måste mata in 1.Guld eller 2.Silver");
}
if(g==1)
material = true;
else
material= false;
int antalStenar=readInt("Antal ädelstenar: ");
ny = new Smycke(n,material,antalStenar);
break;
case 2:
//aktie
break;
case 3:
//apparat
break;
default:
System.out.println("Error: 1-3");
}
p.addPryl(ny);

System.out.print("\n");
// Prylar pr = new Prylavoid visar(smycke, aktie, apparat);
// allaPrylar.add(pr);

}

void visaRikaste(){
// System.out.print("Vem skall bort?");
}

void visaViss(){
//Koden för att visa viss
}

void borskrasch(){
//Koden för att visa borskrasch
}

void visaAlla(){
System.out.print("En person " + namn);

}

public static void main(String[]args){
HuvudProgram hp = new HuvudProgram();
System.out.println("Prylprogrammet BETA 1");
for(;;){
int val=hp.readInt("\n 1.Skapa ny person \n 2.Skapa ny pryl \n 3.Visa allt \n 4.Visa rikaste \n 5.Visa viss \n 6.Börskrasch \n 7.Avsluta \n \n Välj ett kommando: ");
System.out.println("");
switch (val){
case 1: hp.skapaPerson(); break;
case 2: hp.skapaPryl(); break;
case 3: hp.visaAlla(); break;
case 4: hp.visaRikaste(); break;
case 5: hp.visaViss(); break;
case 6: hp.borskrasch(); break;
case 7: System.out.println("Tack och hej då!");
System.exit(0);
default: System.out.println("Fel kommando");
}
}
}
}

Person:
import java.util.*;
class Person{
private ArrayList<Prylar> allaPrylar = new ArrayList<Prylar>();

private String namn;

public Person(String namn){
this.namn = namn;
}

public String getNamn(){
return namn;

}

public void addPryl(Prylar ny){
allaPrylar.add(ny);
}
}

Visa signatur

iCus

Permalänk

void visaAlla(){ System.out.print("En person " + namn); }

Kan inte hitta att du ens har namn som en variabel eller är det jag som är blind?

Du bör skriva typ

foreach(Person p in alla){ System.out.println(p.getNamn()); }

namn är något som ligger i klassen person och du måste alltså anropa ett objekt av klassen person. En foreach loop loopar igenom alla objekt av en typ i klassen

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase

Permalänk
Medlem

foreach är väll inte godkänt i java? men du skrev ju "bör" så
Testade lite och det verkar vara typ såhär:

public void visaAlla(){ int i=0; for (Person p : alla){ System.out.println(++i + ": " + p.getNamn()); } }

Du kan ju strunta i countern, men kan vara kul & se hur många man har i listan om man inte orkar räkna själv...

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Dalton Sleeper
foreach är väll inte godkänt i java? men du skrev ju "bör" så
Testade lite och det verkar vara typ såhär:

public void visaAlla(){ int i=0; for (Person p : alla){ System.out.println(++i + ": " + p.getNamn()); } }

Du kan ju strunta i countern, men kan vara kul & se hur många man har i listan om man inte orkar räkna själv...

Hade själv aldrig hört talas om foreach.. men sen är jag ingen höjdare på Java heller. Ska testa detta genast. Tack så mycket!

Visa signatur

iCus

Permalänk
Citat:

Ursprungligen inskrivet av Mcus
Hade själv aldrig hört talas om foreach.. men sen är jag ingen höjdare på Java heller. Ska testa detta genast. Tack så mycket!

Foreach är lite mer .net :$

Visa signatur

Asus Striker II Extreme / XFX Geforce GTX 280 / Q9450 @ 3.6GHz/ TRUE Noctua 120/ 4x1GB Corsair TWIN3X2048-1333C9DHX / X25-M G2 80gb Velociraptor / Win 7 Ultimate x64/ Antec P190

MovieDatabase