31. oktober 2004 - 18:23Der er
116 kommentarer og 2 løsninger
Array og sortering
Jeg vil lave et program som skal kunne sortere et array af heltal. Det skal kunne kaldes med et array, der indeholder fra 0 til n heltal, hvis orden ikke er kendt. Jeg har derudover planer om at det skal være muligt at sortere arrayet i enten stigende eller faldende orden. Jeg har bikset lidt rundt med det, men er gået kold. Pointsne tilfalder den der kan skrive mig koden på ovenstående.
Fastpoint, jeg tror du er på sporet af noget jeg kan bruge. Når, jeg smider din kode ind i BlueJ kan den dog ikke resolve symbol - variable liste. Hvis du/I har mulighed for det kan det så skrives mere simpelt, så jeg har en chance for at forstå hvad det er der sker? Jeg vil gerne have koden helt ned på "jeg har lige åbnet en java-bog-niveau".
public static void main(String[] args) { int[] liste = {2,5,8,1,6,19,62,442,12,56} ; for (int index = 1; index < liste.length; index++) { int key = liste[index]; int position = index;
public class Fields { public static void main(String[] args) { int[] liste = {2,5,8,1,6,19,62,442,12,56} ; public static void Fields() { for (int index = 1; index < liste.length; index++) { int key = liste[index]; int position = index;
public class Fields { public static void main(String[] args) { int[] liste = {2,5,8,1,6,19,62,442,12,56} ; public static void Fields() { for (int index = 1; index < liste.length; index++) { int key = liste[index]; int position = index;
jeg fik koden compiled. Jeg er dog ikke helt med på hvad det er den gør. Det jeg havde forstillet mig var noget i stil med:
public class Program { private ArrayList numbers;
public Program() {
numbers = new ArrayList();
}
public void addNumber(int number) { numbers.add(number); }
}
Jeg kan dog ikke indsætte int i denne array. Derudover skal der selfølgelig kunne sorteres osv. Som du kan se, er det her helt ned på begynderniveau, men kan nogle af de ting bruges? Og kan det laves som en alm. arraylist?
super, jep, jeg er jo ikke nået så langt;-) Men, bare så det er på lavt niveau og så så den kan sorter, det er vist det jeg mangler, hvis ellers jeg kunne få den til at add´e tal.
den sidste er vist på sporet af noget. Den compiler, men kommer ikke med nogen sortering!? Hvordan sortere den dem? Kan jeg få en System.out.println? Jeg skal have lavet et test program der kan tjekke om de er sorteret korrekt...
ok, det er jo glimrende. Jep, kan godt se jeg have den selv, men bliver sgu lidt forvirret engang imellem;-) Godt, nu ser det ud til at den kan sortere efter laveste, hvordan laver jeg den modsatte?
det virker jo det shit. Okay, så er vi jo klar til den sidste mind-breaker;-) Det jeg nu mangler er at lave en test klasse, der skal teste mit program. Som det andet, simpelt. Fx, teste om der er negative tal Teste at tallene bliver sorteret korret, samt teste hvad der sker hvis de i forvejen er sorteret inden jeg beder dem om at blive det.
Fx, teste om der er negative tal - om der er tal under 0? Teste at tallene bliver sorteret korret - Det går man vel ud fra at den gør når man bruger en metode til det? samt teste hvad der sker hvis de i forvejen er sorteret inden jeg beder dem om at blive det. - så sker der ikke noget for den sortere kun det som ikke er sorteret.. hvis der er kommet nyt ind i array'en siden sidst så vil man kunne.
ja, det giver næsten sig selv. Det er et meget simpelt og ligetil program og også nemt at teste. Men, det er en øvelse i at lave extream programming, dvs. test før kodning. Jeg burde have lavet testen først, men da jeg har så voldsomt store problemer med at kode, har jeg lavet koden først, heh. Så denne dummy af et testprogram er jo i dette tilfælde ligegyldig, men kunne ved størrer projekter være nyttig. Derfor er jeg nødt til at lave det testprogram også.
ok, den skal så returnere et true eller false. Desuden skal denne kode ligge i en anden klasse der hedder test. Hvordan får jeg denne kode koblet sammen med min program kode?
Jeg skal skrive en klasse, der kalder sorteringsprogrammet (altså min klasse "Program") med de testcases, jeg har beskrevet (i dette tilfælde om der er indtastet negative tal), og checker, at resultatet er korrekt. Hver testcase skal returnere en sand/falsk for hvorvidt testen blev bestået. Hvis alle tests er bestået, skal test-klassen melde, at hele testen blev bestået.
men fastpoint, det går jo fremragende, vi er der næsten. Måske arne v giver en hånd med igen?;-) Jeg skal skrive en klasse, der kalder sorteringsprogrammet (altså min klasse "Program" som vi lavede før) med de testcases, jeg har beskrevet (i dette tilfælde om der er indtastet negative tal), og checker, at resultatet er korrekt. Hver testcase skal returnere en sand/falsk for hvorvidt testen blev bestået. Hvis alle tests er bestået, skal test-klassen melde, at hele testen blev bestået.
min kode før tester godt nok kun om der er et negativt tal i index et af det array jeg oprettede... det fordi jeg tænkte så snart der er et tal deri så kan du regne ud at der er negative tal;) så den skal lige laves lidt om ..
og til den der fejl.. har jeg aldrig hørt før... måske er det fordi din parameter er en Arraylist og ikke bare en Array...
jeg kan ikke få det til at virke, men den skal jo hente number fra de numbers der ligger i vores array i klassen Program og teste om de er mindre end 0. Kan man lave en simpel tilføjelse til ovenstående kode så det kommer til at virke?
det ser fornuftigt ud Arne, men er der mulighed for at lave koden uden: public static void main(String[] args) den æder mit program ikke og den falder lidt udenfor hvad jeg ved og har haft om?
jep, men hvis jeg bruger numbers.get(i) i min test klasse så kan den ikke solve variable i? Det er som om at der ikke er nogen forbindelse mellem min testklasse og programmet, se:
det vist fordi numbers listen ikke ligger i den klasse.. tænkte mere på du skulle sige numbers.get(i) fra den klasse den ligger i og sende det tal hen i
jeg kan ikke ligge den i samme klasse, test klassen skal være en klasse for sig selv, derfor skal listen hentes over i testklassen, men kan ikke få det til at virke...
sorry, den missede jeg lige! Men, ok, nu har jeg smidt den ind, begge klasser compiler, men når jeg vil køre min test siger den NullPointerExeption; Null og pejer på ArrayList numbers = prg.getNumbers();
Kanon nu compiler den: Jeg lavede lige en test på at se om den også tjekker om der er minus tal, det gør den men den tjekker forkert!! Her er PROGRAM KODEN:
import java.util.*;
public class Program
{ private ArrayList numbers;
public Program() { numbers = new ArrayList(); }
public void addNumber(int number) {
numbers.add(new Integer(number)); }
public int numberOfNumbers() { return numbers.size(); }
public void listNumbers() { int index = 0; while (index < numbers.size()) { System.out.println(+index + " : " + numbers.get(index)); index++; } }
public void sort() { Collections.sort(numbers);
}
public void sortReverse() { Collections.reverse(numbers); }
public void udskriv() { for(int i = 0; i < numbers.size(); i++) System.out.println(numbers.get(i));
}
public ArrayList getNumbers() { return numbers; }
}
og her er TEST KODEN:
import java.util.*;
public class Test4 {
private Program prg;
public Test4() { prg = new Program(); prg.addNumber(3); prg.addNumber(23); prg.sort();
// initialise instance variables }
public boolean testForMinus() { ArrayList numbers = prg.getNumbers(); for(int i = 0; i < 0; i++) { if(((Integer)numbers.get(i)).intValue() < 0) { return false; } } return true; } }
jep, den har jeg ændret, men tror at fejlen ligger i: prg = new Program(); prg.addNumber(3); prg.addNumber(23); prg.sort(); 3 og 23 er jo positive og den melder true lige meget hvad. Hvis jeg ændrer 3 til -3 så melder den false uanset hvad jeg ellers taster ind....
p.s fastpoint, hvordan hulan er du blevet så sej til at programmere på 2 måneder? Bruger du nogle bestemte tutorials på nettet eller hvordan har du gjort? Jeg har forsøgt længe og har sgu stadig ikke fattet helt hvad det går ud på....synes ikke de tutorials jeg finder er til megen gavn...
vær opmærksom på at jeg kører programmet i BlueJ! Her har jeg mulighed for at oprette objekter, dvs. når jeg bruger addNumber metoden, taster jeg fra tastatur manuelt nogle tal ind. De tal gemme den i min array og det er de tal jeg skal teste på... dvs. i koden
prg = new Program(); prg.addNumber(3); <- her! prg.addNumber(23); prg.sort();
skal jeg teste på de tal jeg har tastet ind og ikke 3 og 23!! Jeg har forsøgt med number i stedet for 3, men den æder den ikke. Hvordan får jeg ført mine numbers fra array´en ind her så der kan blive testet på dem???
hmm nej, jeg laver et objekt fra Program klassen og et fra test. Så vælger jeg addNumber metoden og taster nogle tal ind. Derefter vælger jeg fra mit test objekt testForMinus metoden. Men kan jeg ikke få de værdier ind i min contructor på test-klassen, som jeg har indtastet ved hjælpe af min addNumber metode???
jeg tror bare vi misforstår hinanden. De tal jeg smider ind i min addNumber metode skal bruges i min TestForMinus metode. Der er 2 klasser, kan man ikke bare føre de tal fra den ene over til den anden? Eller henvise fra den ene til den anden?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.