Gå til innhold

Lite problem med stebarn i Java!


Anbefalte innlegg

Sitter her og slår hodet mot veggen i følgende metode:

 

	public Person [] finnSteSosken(String navn, Person[] steSosken){
Person pers = null;
Mann pappa = null;
Kvinne mamma = null;
String far = "";
String mor = "";
int teller = 0;
if (personregister.containsKey(navn)){
	pers = personregister.get(navn);
}
if(personregister.containsKey(pers.hentNavnMor())) {
	mamma = (Kvinne) personregister.get(pers.hentNavnMor());
	mor = pers.hentNavnMor();
}
if(personregister.containsKey(pers.hentNavnFar())) {
	pappa = (Mann) personregister.get(pers.hentNavnFar());
	far = pers.hentNavnMor();
}
if (pappa.hentBrud() != null && mamma.hentBrudgom() != null) {
	if (!(pappa.hentBrud().equals(mor))){
	Kvinne stemor = (Kvinne) personregister.get(pappa.hentBrud());
	Person [] kBarn = stemor.hentBarnKvinner();
	for (int i = 0; i<10; i++){
			if(kBarn[i] != null) {
			Person barn = kBarn[i];
			steSosken[teller] = barn;
			teller++;
		}
	}
	}
	if (!(mamma.hentBrudgom().equals(far))){
	Mann stefar = (Mann) personregister.get(mamma.hentBrudgom());
	   	Iterator it = stefar.barnMenn.values().iterator();
	while(it.hasNext()) {
		Person barn = (Person) it.next();
		steSosken[teller] = barn;
		teller++;
	}
	}
}
return steSosken;
}

 

Problemet er rett og slett at steSosken arrayet alltid er tomt. Det har naturlig nok noe med if-testene å gjøre. Og jeg regner med at det er denne:

if (!(mamma.hentBrudgom().equals(far))){

og/eller

if (!(pappa.hentBrud().equals(mor))){

 

Noen som ser problemet?

 

Metoden skal altså gå gjennom et hashmap med personer og finne stesøsken til en gitt person.

 

Det er ikke nødvendig å kommentere at koden er stygg eller kan gjøres på en lettere måte o.l.. Har kun programmert i et halvt år og poenget er at det skal virke, ikke se pent ut ;)

Endret av Skagen
Utdypet emnetittelen littegrann.
Lenke til kommentar
Videoannonse
Annonse

Ganske vanskelig å si uten å kjenne klasse Person, Mann, Kvinne etc. Foreslår at du heller poster kode som vi kan kompilere og at du starter med et minimalt eksempel for deg selv. For eksempel at du kan skrive ut alle brudene eller barna til en Mann.

Lenke til kommentar

Haha, jeg misunner det ikke. Jeg har hørt rykter om den idiotiske oppgaven der helt bort hit til UiB.

 

Det jeg har funnet ut er en enkel og kjapp måte å debugge kode på, er å skrive ut variabler underveis der du tror det kan være noe feil.

 

Så dersom du forventer at denne linjen skal returnere true, men den returnerer false:

if (!(pappa.hentBrud().equals(mor))){

Kan du enkelt og greit skrive ut litt informasjon før den sjekker:

System.out.println(getClass().getName() + "\nPappas brud:\t" + pappa.hentBrud() + "\nMamma:\t" + mor);
if (!(pappa.hentBrud().equals(mor))){

Lenke til kommentar
Gjest Slettet+1374861

Hvilken datatype returnerer hentBrud() og hentBrudgom() egentlig?

Når jeg ser på koden her blir jeg litt skeptisk:

	String far = "";
String mor = "";

if (pappa.hentBrud() != null && mamma.hentBrudgom() != null) {
	if (!(pappa.hentBrud().equals(mor))){
		Kvinne stemor = (Kvinne) personregister.get(pappa.hentBrud());

	if (!(mamma.hentBrudgom().equals(far))){
		Mann stefar = (Mann) personregister.get(mamma.hentBrudgom());

Gitt at hentBrud() returnerer ett objekt av type Pers, eller ett annet objekt, så kjører du altså en equals-sammenligning mellom en Pers og en String.

Gitt det andre tilfellet, at hentBrud() returnerer er String representasjon av ett navn, så vil equals-en forsåvidt virke, men neste steg vil ikke fordi du der prøver å caste en String over til en (Kvinne) eller (Mann), for å fylle ut stemor/stefar variabelen...

 

Jeg så ikke noe videre på koden din, men sånn ved første øyekast slo dette meg som merkelig..

Lenke til kommentar

Brud og brudgom returnerer en string.

Alle personer lagres ved en string i HashMap, så det skal gå å hente ut et objekt ved å bruke navnet til stefar/stemor.

 

Uansett, her er koden til person, mann og kvinne.

class Person {
private String navn;
private String kjønn;
private boolean gift = false;
private String far;
private String mor;
private String brud;
private String brudgom;
int antbarn = 0;
//get/set metoder for alle variablene
void settNavn(String navn){
this.navn = navn;
}
void settKjønn(String kjønn){
this.kjønn = kjønn;
}
void settNavnMor(String navnmor){
	mor = navnmor;
}
void settNavnFar(String navnfar){
	far = navnfar;
}
void settGift(boolean gift){
this.gift = gift;
}
void settBrud(String brud){
this.brud = brud;
}
void settBrudgom(String brudgom){
this.brudgom = brudgom;
}

Integer hentAntallBarn(){
return this.antbarn;
}
String hentBrudgom(){
return this.brudgom;
}
String hentBrud(){
return this.brud;
}
Boolean hentGift(){
return this.gift;
}
String hentNavn(){
	return this.navn;
}
String hentKjønn(){
	return this.kjønn;
}
String hentNavnFar(){
	return this.far;
}
String hentNavnMor(){
	return this.mor;
}
Person (){
}

Person(String navn, String kjønn, String far, String mor){
this.navn = navn;
this.kjønn = kjønn;
this.far = far;
this.mor = mor;
}

void registrerBarn(Person barn) {
}
void fjernBarn(Person barn){
}
void skrivUtBarn(){
}
}//end class Person
class Mann extends Person {
HashMap<String, Person> barnMenn = new HashMap<String, Person>();

Mann (Person nyPerson) {
super(nyPerson.hentNavn(),nyPerson.hentKjønn(),nyPerson.hentNavnFar(),nyPerson.hentNavnMor());
}
void registrerBarn(Person barn) {
barnMenn.put(barn.hentNavn(), barn);
antbarn += 1;
}

void fjernBarn(Person barn) {
barnMenn.remove(barn.hentNavn());
antbarn -= 1;
}
void skrivUtBarn() {
Iterator it = barnMenn.values().iterator();
if(barnMenn.size() != 0) {
	while (it.hasNext()) {
	Person barn = (Person) it.next();
	PersonUtsyn pu = new PersonUtsyn();
	pu.skrivBarna(barn.hentNavn());
	}
}
}
} //end class Mann

class Kvinne extends Person {
Person[] barnKvinner = new Person[10];

Kvinne (Person nyPerson) {
super(nyPerson.hentNavn(),nyPerson.hentKjønn(),nyPerson.hentNavnFar(),nyPerson.hentNavnMor());
}

void registrerBarn(Person barn) {
for (int i = 0; i<10; i++){
	if (barnKvinner[i] == null) {
	barnKvinner[i] = barn;
	i = 10;
	antbarn += 1;
	}
}
}

void fjernBarn(Person barn){
for (int i = 0; i<10; i++){
	if (barnKvinner[i] == barn) {
	barnKvinner[i] = null;
	i = 10;
	antbarn = antbarn - 1;
	}
}
}
void skrivUtBarn(){
for (int i = 0; i<10; i++){
	if(barnKvinner[i] != null) {
	Person barn = barnKvinner[i];
	PersonUtsyn pu = new PersonUtsyn();
	pu.skrivBarna(barn.hentNavn());
	}
}
}
Person[] hentBarnKvinner(){
return this.barnKvinner;
}

Lenke til kommentar
Haha, jeg misunner det ikke. Jeg har hørt rykter om den idiotiske oppgaven der helt bort hit til UiB.

 

Hva er idiotisk med denne oppgaven?

Hvilke feltvariabler inneholder Person-klassen?

Uhh?

Please elaborate...

Hvis du kjenner til oppgaven, så hadde du visst hvordan Person-klassen skulle lages. Så vidt jeg fikk med meg, skulle ikke Person inneholde Person-objekter for far og mor, men strenger som siden måtte brukes for å søke seg frem til Person-objektene.
Lenke til kommentar
Haha, jeg misunner det ikke. Jeg har hørt rykter om den idiotiske oppgaven der helt bort hit til UiB.

 

Hva er idiotisk med denne oppgaven?

Hvilke feltvariabler inneholder Person-klassen?

Uhh?

Please elaborate...

Hvis du kjenner til oppgaven, så hadde du visst hvordan Person-klassen skulle lages. Så vidt jeg fikk med meg, skulle ikke Person inneholde Person-objekter for far og mor, men strenger som siden måtte brukes for å søke seg frem til Person-objektene.

Hvis du hadde kjent til tråden så hadde du sett at Bro2 sitt svar var en respons til forespørslen fra en annen poster om hva Person-klassen inneholder. Hensikten med spørsmålet var ikke umidelbart forstålig siden koden til Person-klassen finns i denne tråden. Tipper  det var derfor Bro2 spør "Uhh? Please elaborate..."

Lenke til kommentar
Haha, jeg misunner det ikke. Jeg har hørt rykter om den idiotiske oppgaven der helt bort hit til UiB.
Hva er idiotisk med denne oppgaven?
Hvilke feltvariabler inneholder Person-klassen?
Uhh?

Please elaborate...

Hvis du kjenner til oppgaven, så hadde du visst hvordan Person-klassen skulle lages. Så vidt jeg fikk med meg, skulle ikke Person inneholde Person-objekter for far og mor, men strenger som siden måtte brukes for å søke seg frem til Person-objektene.
Hvis du hadde kjent til tråden så hadde du sett at Bro2 sitt svar var en respons til forespørslen fra en annen poster om hva Person-klassen inneholder. Hensikten med spørsmålet var ikke umidelbart forstålig siden koden til Person-klassen finns i denne tråden. Tipper det var derfor Bro2 spør "Uhh? Please elaborate..."
Det virker som et ledende spørsmål slik at Bro2 skulle forstå at det var feltvariablene som var litt utenom det vanlige; nemlig "private String far;" fremfor "private Person far;".
Lenke til kommentar
Haha, jeg misunner det ikke. Jeg har hørt rykter om den idiotiske oppgaven der helt bort hit til UiB.
Hva er idiotisk med denne oppgaven?
Hvilke feltvariabler inneholder Person-klassen?
Uhh?

Please elaborate...

Hvis du kjenner til oppgaven, så hadde du visst hvordan Person-klassen skulle lages. Så vidt jeg fikk med meg, skulle ikke Person inneholde Person-objekter for far og mor, men strenger som siden måtte brukes for å søke seg frem til Person-objektene.
Hvis du hadde kjent til tråden så hadde du sett at Bro2 sitt svar var en respons til forespørslen fra en annen poster om hva Person-klassen inneholder. Hensikten med spørsmålet var ikke umidelbart forstålig siden koden til Person-klassen finns i denne tråden. Tipper det var derfor Bro2 spør "Uhh? Please elaborate..."
Det virker som et ledende spørsmål slik at Bro2 skulle forstå at det var feltvariablene som var litt utenom det vanlige; nemlig "private String far;" fremfor "private Person far;".

 

Jeg kan ikke skjønner hvorfor denne oppgaven er idiotisk fordi feltvariablene i Person-klassen er utenom det vanlige.

Nå skal det også nevnes at oppgaven ikke sier noe om hvilke typer variablene i Person-klassen skal være, noe som gjør utsagnet «Jeg har hørt rykter om den idiotiske oppgaven der helt bort hit til UiB» enda merkeligere.

Derfor ber jeg om en forklaring.

Endret av Bro2
Lenke til kommentar
Har du lest kontrakten Modell_grensesnitt (merk også at selve navnet bryter med de facto standard på navngiving, i.e. «CamelCase»)?

 

Au, au, au for et navn. Da jeg var gruppelærer på Ifi dyttet jeg kodekonvensjoner inn i hodene til mine stakkars studenter hele tiden, dette gjør vondt for meg å se.

 

Sukk. Trist.

Meget trist. Spesielt med tanke på at det ikke engang er INF1000, men INF1010, objektorientert programmering. Alle som programmerer Java i større skala vet om de forskjellige diskusjonene rundt navngiving på grensesnitt (e.g. IClassName og implementasjonen ClassName, eller ClassName med implementasjonen StandardClassName eller ClassNameImpl osv.), men å kalle det _grensesnitt, ja, det er hinsides enhver programmerer å forstå.

 

I tillegg er jeg sterk motstander av å kode på norsk. Jeg mener all kode, i.e. klassenavn, grensesnittnavn, metodenavn og feltvariabler (inkl. lokale variabler) bør være på engelsk, og det gjelder også kommentarer og dokumentasjon.

Endret av pgdx
Lenke til kommentar
I tillegg er jeg sterk motstander av å kode på norsk. Jeg mener all kode, i.e. klassenavn, grensesnittnavn, metodenavn og feltvariabler (inkl. lokale variabler) bør være på engelsk, og det gjelder også kommentarer og dokumentasjon.

 

Stort sett enig, det aller aller meste bør være på engelsk. MEN enkelte ganger (dog ikke i dette tilfellet) dreier foretningslogikken seg om såpass spesielle og lokale ting at det ikke nytter eller gir mening å oversette. I de tilfellene synes jeg norsk er tillatt.

 

Som feks da jeg jobbet med særtilfeller og rariteter i blåreseptforskriftene :)

Endret av steingrim
Lenke til kommentar
I tillegg er jeg sterk motstander av å kode på norsk. Jeg mener all kode, i.e. klassenavn, grensesnittnavn, metodenavn og feltvariabler (inkl. lokale variabler) bør være på engelsk, og det gjelder også kommentarer og dokumentasjon.

 

Stort sett enig, det aller aller meste bør være på engelsk. MEN enkelte ganger (dog ikke i dette tilfellet) dreier foretningslogikken seg om såpass spesielle og lokale ting at det ikke nytter eller gir mening å oversette. I de tilfellene synes jeg norsk er tillatt.

 

Som feks da jeg jobbet med særtilfeller og rariteter i blåreseptforskriftene :)

For ikke å gå for mye off topic i stebarn; diskusjon kan fortsettes her ... Endret av pgdx
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...