mboost-dp1
programering i JAVA!
- Forside
- ⟨
- Forum
- ⟨
- Programmering
hej! jeg har lige et lille problem som jeg ikke helt kan løse!
n = fil.size();
afstande = new Vektor(n);
for (int r = 0 ; r < n ; r ++)
for(int k =0 ; k < r ; k ++)
afs.set(r,fil.get(r).afstand(fil.get(k)));
jeg har tre koordinater: (paranteset betyder ikke noget det er til linien senere at det bruges)
10 30 (0)
50 40 (1)
30 10 (2)
så jeg skal finde afstanden mellem koordinaterne (0,1) , (1,2) og (2,0) altså jeg burde for
(42 36 28)
men det er ikke helt det som jeg få. (hvordan kan jeg så summe de n tal)
Og hvis jeg har nogen andre koordinater
10 20 (0)
50 70 (1)
50 30 (2)
(64 40 41)
så jeg ved ikke helt hvad jeg skal skrive for at jeg for den korteste afstand af de 2.
NB: det som regner afstanden ud er den almindelige afstandsformel for afstanden mellem 2 punkter i xy-planen. Og vektor klassen har jeg også lavet (der indsættes bare tal mellem 2 paranteser [***** ])
n = fil.size();
afstande = new Vektor(n);
for (int r = 0 ; r < n ; r ++)
for(int k =0 ; k < r ; k ++)
afs.set(r,fil.get(r).afstand(fil.get(k)));
jeg har tre koordinater: (paranteset betyder ikke noget det er til linien senere at det bruges)
10 30 (0)
50 40 (1)
30 10 (2)
så jeg skal finde afstanden mellem koordinaterne (0,1) , (1,2) og (2,0) altså jeg burde for
(42 36 28)
men det er ikke helt det som jeg få. (hvordan kan jeg så summe de n tal)
Og hvis jeg har nogen andre koordinater
10 20 (0)
50 70 (1)
50 30 (2)
(64 40 41)
så jeg ved ikke helt hvad jeg skal skrive for at jeg for den korteste afstand af de 2.
NB: det som regner afstanden ud er den almindelige afstandsformel for afstanden mellem 2 punkter i xy-planen. Og vektor klassen har jeg også lavet (der indsættes bare tal mellem 2 paranteser [***** ])
ok! nu har jeg fået noget der ligner.
vha disse ting
n = fil.size();
afstande = new Vektor(n);
for (int r = 0 ; r < n ; r ++)
for(int k =0 ; k < r ; k ++)
afs.set(r,fil.get(r).afstand(fil.get(k)));
og
public void enumerate (ArrayList<By> byer ,int i){
if (i >= byer.size() ){
System.out.println("permutation: " + byer);
System.out.println("afstand: " + afs);
} else {
for (int j = i ; j < byer.size(); ++j){
Collections.swap(byer, i, j);
enumerate(byer , i+1);
Collections.swap(byer, j, i);
}
}
}
for jeg nu
10 30 (0)
50 40 (1)
30 10 (2)
og
10 30 (0)
30 10 (2)
50 40 (1)
som passer vha. permutationen.
men når jeg regner sfatanden ud for de 2 for jeg
[0 41 36]
som passer for den øverste men jeg for det samme for den nederste [0 41 36]
hvilket ikke burde være tilfælde.
(så jeg mangler lige afstanden mellem den sidste koordinat og den første og JEG VED IKKE HVAD DER ER GALT MED DEN NEDERSTE)
vha disse ting
n = fil.size();
afstande = new Vektor(n);
for (int r = 0 ; r < n ; r ++)
for(int k =0 ; k < r ; k ++)
afs.set(r,fil.get(r).afstand(fil.get(k)));
og
public void enumerate (ArrayList<By> byer ,int i){
if (i >= byer.size() ){
System.out.println("permutation: " + byer);
System.out.println("afstand: " + afs);
} else {
for (int j = i ; j < byer.size(); ++j){
Collections.swap(byer, i, j);
enumerate(byer , i+1);
Collections.swap(byer, j, i);
}
}
}
for jeg nu
10 30 (0)
50 40 (1)
30 10 (2)
og
10 30 (0)
30 10 (2)
50 40 (1)
som passer vha. permutationen.
men når jeg regner sfatanden ud for de 2 for jeg
[0 41 36]
som passer for den øverste men jeg for det samme for den nederste [0 41 36]
hvilket ikke burde være tilfælde.
(så jeg mangler lige afstanden mellem den sidste koordinat og den første og JEG VED IKKE HVAD DER ER GALT MED DEN NEDERSTE)
der skal stå i paranteset (DET VED JEG NEMLIG IKKE HVORDAN JEG KAN GØRE).
HÅBER VIRKELIG AT DER ER NGEN SOM KAN HJÆLPE MIG!
HÅBER VIRKELIG AT DER ER NGEN SOM KAN HJÆLPE MIG!
nu har jeg fået dem udskrevet i denneher rækkefølge
[0 41 36 28] hvilket passer for den øverste permutation men jeg for den samme for den ande så jeg ved ikke helt hvad der er galt. Jeg ved ikke helt hvilken kode jeg skal skrive for at summe disse tal og hvordan jeg så til sidst kan finde den mindste afstand.
[0 41 36 28] hvilket passer for den øverste permutation men jeg for den samme for den ande så jeg ved ikke helt hvad der er galt. Jeg ved ikke helt hvilken kode jeg skal skrive for at summe disse tal og hvordan jeg så til sidst kan finde den mindste afstand.
Nu har jeg studeret din kode i flere minutter, og jeg har på fornemmelsen af du er lige så forvirret som jeg er. :)
Har jeg forstået dette rigtigt:
For hver koordinat beregner du afstanden til alle efterfølgende koordinat, og overskriver resultaterne med hinanden.
Forestil dig at n er 3. Hold styr på variablerne (især r og k) på et stykke notespapir, og kør de to løkker igennem i hovedet.
Så sker der et eller andet magisk, hvor metoden enumerate bliver kaldt med nogle argumenter, som er grebet ud af luften. Eller også har du glemt noget væsentligt. :)
enumerate ser ud til at være en rekursiv funktion, som starter ved nul. Men hvad er formålet med den? Det ligner en sortering, men tilsyneladende skal du kun bruge ét tal: Det mindste. Hvorfor så sortere?
Har jeg forstået dette rigtigt:
n = fil.size(); [/quote]
fil er en liste med koordinater. Det er ikke en fil, men det kalder du den alligevel.
[code]afstande = new Vektor(n); [/quote]
Denne Vektor kalder du så afs længere nede.
[code]for (int r = 0 ; r < n ; r ++)
for(int k =0 ; k < r ; k ++)
afs.set(r,fil.get(r).afstand(fil.get(k)));
For hver koordinat beregner du afstanden til alle efterfølgende koordinat, og overskriver resultaterne med hinanden.
Forestil dig at n er 3. Hold styr på variablerne (især r og k) på et stykke notespapir, og kør de to løkker igennem i hovedet.
Så sker der et eller andet magisk, hvor metoden enumerate bliver kaldt med nogle argumenter, som er grebet ud af luften. Eller også har du glemt noget væsentligt. :)
enumerate ser ud til at være en rekursiv funktion, som starter ved nul. Men hvad er formålet med den? Det ligner en sortering, men tilsyneladende skal du kun bruge ét tal: Det mindste. Hvorfor så sortere?
hej!
jeg har sidet og leget med det men kan stadigvæk ikke for det til at fungere.
jeg har fået den til at regne rigtigt med den første permutation hvor:
10 30 (0)
50 40 (1)
30 10 (2)
der for jeg:
[0 41 36 28]
hvilket passer men problemet er at jeg ikke forstå hvorfor denne her permutation:
10 30 (0)
30 10 (2)
50 40 (1)
også giver
[0 41 36 28]
i stedet for
[0 28 36 41]
(Jeg kan godt forstå at afstanden her er den samme da det er ligegyldigt hvilken en man tager først men det bliver anderledes når der kommer flere koordinater så derfor skal jeg summe dem og finde den mindste)
jeg har sidet og leget med det men kan stadigvæk ikke for det til at fungere.
jeg har fået den til at regne rigtigt med den første permutation hvor:
10 30 (0)
50 40 (1)
30 10 (2)
der for jeg:
[0 41 36 28]
hvilket passer men problemet er at jeg ikke forstå hvorfor denne her permutation:
10 30 (0)
30 10 (2)
50 40 (1)
også giver
[0 41 36 28]
i stedet for
[0 28 36 41]
(Jeg kan godt forstå at afstanden her er den samme da det er ligegyldigt hvilken en man tager først men det bliver anderledes når der kommer flere koordinater så derfor skal jeg summe dem og finde den mindste)
n = ny.size();
afstande = new Vektor(n);
for (int r = 0 ; r < n ; r ++)
for(int k =0 ; k < r ; k ++)
afsstande.set(r,ny.get(r).afstande(ny.get(k)));
nu har jeg rette i det så der ikke er noget forvering!
(det du skrev i #9 er helt fint)
jeg tror ikke at jeg overskriver resultaterne, bliver de ikke bare puttet ind i afstande. (eller gør jeg måske :-( )
hvad der angår enumerate så er det er rekursiv funktion den første koordinat skal altid være nummer 1 vi må ikke flytte rundt på den. vi må kun flytte på dem fra 1-n (0 indexering).
mit problem er at jeg ikke kan ved hvorfor den udregner det samme 2 gange!
afstande = new Vektor(n);
for (int r = 0 ; r < n ; r ++)
for(int k =0 ; k < r ; k ++)
afsstande.set(r,ny.get(r).afstande(ny.get(k)));
nu har jeg rette i det så der ikke er noget forvering!
(det du skrev i #9 er helt fint)
jeg tror ikke at jeg overskriver resultaterne, bliver de ikke bare puttet ind i afstande. (eller gør jeg måske :-( )
hvad der angår enumerate så er det er rekursiv funktion den første koordinat skal altid være nummer 1 vi må ikke flytte rundt på den. vi må kun flytte på dem fra 1-n (0 indexering).
mit problem er at jeg ikke kan ved hvorfor den udregner det samme 2 gange!
Jeg piller lige en lille bitte anelse, jeg har også indsat punktummer for at få lidt indrykning:
Stedet du gemmer resultatet, bestemmes i den yderste løkke.
For mig at se kunne du helt droppe den inderste løkke, og bare sætte k = r - 1.
En måde at komme videre kunne være refactoring.
Find på bedre navne til variabler og metoder. Måske skal koden deles op i metoder på en anden måde, for at få gode navne.
Hvis du ikke kan finde på et godt navn, er det et tegn på at du ikke selv helt kender formålet.
Jeg har nu nærstuderet din enumerate-metode. Jeg har ingen anelse om hvad den burde gøre, men så vidt jeg kan se gør den ikke andet end at få tiden til at gå.
Prøv at tænke den igennem igen (især formålet med den!), eller forklar hvad den burde gøre.
for (int r = 0 ; r < n ; r ++) {
. for(int k =0 ; k < r ; k ++) {
. . x = ny.get(r).afstande(ny.get(k));
. . afsstande.set(r, x);
. }
}
Stedet du gemmer resultatet, bestemmes i den yderste løkke.
For mig at se kunne du helt droppe den inderste løkke, og bare sætte k = r - 1.
En måde at komme videre kunne være refactoring.
Find på bedre navne til variabler og metoder. Måske skal koden deles op i metoder på en anden måde, for at få gode navne.
Hvis du ikke kan finde på et godt navn, er det et tegn på at du ikke selv helt kender formålet.
Jeg har nu nærstuderet din enumerate-metode. Jeg har ingen anelse om hvad den burde gøre, men så vidt jeg kan se gør den ikke andet end at få tiden til at gå.
Prøv at tænke den igennem igen (især formålet med den!), eller forklar hvad den burde gøre.
ok!
nu har jeg prøvet at skrive det du har ind men det giver stadigvæk det samme som før. begge gange for jeg samme tal ud. Ang enumerate så er det vores lære der har lavet den og den må der ikke laves om på vi skal lave om på print funktionen (inde i enumerate) for at finde længden af den enkelte permutation.
Håber ikke at jeg er alt for besværlig men jeg kan ikke for det til at gå op!
nu har jeg prøvet at skrive det du har ind men det giver stadigvæk det samme som før. begge gange for jeg samme tal ud. Ang enumerate så er det vores lære der har lavet den og den må der ikke laves om på vi skal lave om på print funktionen (inde i enumerate) for at finde længden af den enkelte permutation.
Håber ikke at jeg er alt for besværlig men jeg kan ikke for det til at gå op!
nu har jeg prøvet at skrive det du har ind men det giver stadigvæk det samme som før.
Det skulle det også gerne, det er er nøjagtigt det samme, bare skrevet på en anelse anderledes måde. Jeg prøvede at gøre det lidt tydeligere at se, at den inderste løkke er spild af tid, da kun resultatet af den sidste gennemkørsel bliver gemt.
Ang enumerate så er det vores lære der har lavet den og den må der ikke laves om på vi skal lave om på print funktionen
Jeg tænkte nok det var en skole-opgave. :)
Anyway:
Jeg kender ikke opgaven. Jeg kender ikke din kode. Hvis du viser mig de to ting kan jeg hjælpe dig.
Jeg skriver ikke opgaven for dig (det ville være at snyde dig og spilde både din og min tid), men jeg vil pege hvilken retning jeg synes du skal gå. Hvad jeg synes du skal koncentrere dig om for at komme videre med ogpaven, hvis du var min elev.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.