21. december 2005 - 22:56Der er
50 kommentarer og 1 løsning
problem med selection sort algoritmen
Hejsa.
Jeg er ved at lave en opgave som går ud på at vise selection og insertion sort algoritmerne. Jeg er gået i stå med en fejlmeddelelse som siger: illegal start of expression ved linien. "if (list[scan].compareTo(list[min]) < 0)"
jeg har sat en markering nedenfor.
Har i nogle forslag? ......................................... import java.util.Random; public class Sort {
// Generates random numbers between 0 and 50.
public static void main (String[] args) { Random generator = new Random(); int num1;
num1 = generator.nextInt(50) + 1;
// creating an array
int[] list = new int[50];
// Load the array with values for (int index=0; index < list.length; index++) list[index] = generator.nextInt(50) + 1; }
// Sorts the array using the selection sort algorithm.
public static void selectionSort (int[] list) { int min; int temp;
for (int index = 0; index < list.length-1; index++) { min = index; for (int scan = index+1; scan < list.length; scan++) --------> if (list[scan].compareTo(list[min]) < 0) min = scan;
} //----------------------------------------------------------------- // Sorts the array using the insertion // sort algorithm. //-----------------------------------------------------------------
{ for (int index = 1; index < list.length; index++) { int tal = list[index]; int position = index;
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Og så skal du huske at kalde selectionSort, og udskrive resultatet, og fjerne eller udkommentere kodestumpen forneden der har med insertionsort at gøre. Så skulle det vist virke.
Jeg prøver alt muligt forskelligt, da jeg ikke er helt sikker på hvad og hvordan jeg kalder selectionSort. Jeg får forskellige fejl.. bla. at den ikke kan returnere en void (hvilket jeg godt kan forstå).. men men men.. jeg kan ikke lure om jeg skal bruge list, index eller temp for at hente den sorterede liste. ? :)
Jamen det du har vist er stort set korrekt. Vis koden hvor du prøver at kalde selectionSort. (Jeg giver aldrig/sjældent løsningen til en "skoleopgave", men gerne hjælp til selvhjælp...)
Super det er også sådan det skal være.. så ka jeg lære det ;)
public static void selectionSort (int[] list) { int min; int temp;
for (int index = 0; index < list.length-1; index++) { min = index; for (int scan = index+1; scan < list.length; scan++) if (list[scan]<list[min]) min = scan;
hovsa, ignorer lige teksten i println. "The average is.."
men når jeg prøver at teste kan jeg både køre en "void main string arg" og en " void selectionSort (int[] list).. den sidste har intet indhold i arrayen og den første har intet output. ?
Det eneste problem jeg har nu er at kalde selectionSort og udskrive resultatet. Men kan jeg kalde selectionsort i toppen af main selvom at sorteringen først udføres i bunden? det mener jeg jo ikke man kan rent logisk, så derfor burde jeg skulle kalde i bunden af klassen sort. ?
Du skal først kalde selectionSort, når du har puttet noget i dit array. Men ja, du kan bare gøre det i main. Og du kan genbruge noget af for-løkken du allerede har til en udskrift - også i main.
OK.. nu er der hul igennem til min array, og har testet det med en println. Mit STORE problem er stadig hvordan jeg kalder selectionSort.. Jeg mener.. der er en hel del variabler jeg kan vælge imellem. Men den variabel jeg mener at indeholde den sorterede array er enten Temp eller list[index].
public static void selectionSort (int[] list) { int min; int temp;
for (int index = 0; index < list.length-1; index++) { min = index; for (int scan = index+1; scan < list.length; scan++) if (list[scan]<list[min]) min = scan;
jeg må kapitulere. Jeg kan simpelthen ikke fatte hvordan jeg skal kunne hente "list" fra selectionSort når den ikke returnere noget - (void). hvordan man evt skulle gøre det er jeg heller ikke sikker på. skal jeg bruge "get" eller skal jeg lave et objekt af selectionSort?
Ja nu virker selectionsSort udprintet (Sikke dog store problemer for en SÅ lille linie som : selectionSort(list);)
Straks er der andre drillerier. Jeg er nu i gang med at få insertionSort algoritmen til at fungere og kan ikke (lige som sidst) compile nedenstående kode pga ".compareTo"-linien.
// Sorts the array using the insertion sort algorithm.
public static void insertionSort (int[] list) { for (int index = 1; index < list.length; index++) { int key = list[index]; int position = index;
// Shift larger values to the right -------> while (position > 0 && key.compareTo(list[position-1]) < 0) { list[position] = list[position-1]; position--; }
list[position] = key; } } }
Jeg har prøvet at erstatte det med < ligesom sidst men det funger heller ikke?
Man sammenligner simple værdier med <, fx int, double, char (og også med >, >=, <=, ==, != ) Man sammenligner objekter med compareTo, fx. String (og også med equals metoden)
Du skal have en klasse med en main-metode. Du kan lægge sorterings-metoden/metoderne i en eller flere andre klasser. Her kan du have dem enten som static eller ikke static metoder. Jeg forstår ikke helt hvad du spørger om.
hvordan kan man i en main metode kalde resultatet fra andre klasser så de vises i en println. ?
Det er sikkert ret simpelt lige som "selectionSort(list);", men jeg kan ikke helt gennemskue det i det kaotiske kode-virvar som en nybegynder-programmørs hjerne må affinde sig med.
En "public class searching" hvori der er en "public static Comparable LinearSearch(Comparable[] list, Comparable target)" og en "public static void selectionSort (int[] list)" og en "public static Comparable BinarySearch (Comparable[] list, Comparable target)"
Nu vil jeg gerne kalde søgningerne fra en driver klasses main metode.
Da alle metoderne er statiske, bruger jeg dit eksempel oven over. EnKlasse.enStatiskMetode();
dvs. searching.enStatiskMetode(); ? jeg har problemer med "Comparable LinearSearch" da comparable er en java.lang.
LinearSearch som du har defineret den, tager 2 argumenter: en liste af dimser, og en dims (som nok er den der skal søges efter). I eksemplet du viser kalder du den med 1 argument.
Men prøv at fortælle hvad din fejl er. Det hjælper dyt at skrive: "Men får fejl" - Hvilken fejl?
Så har du ikke en variabel med navn target, der hvor du kalder LinearSearch. (og så plejer man at navngive metoder i java med lille begyndelsesbogstav: linearSearch, og klasse med stort: public class Searching - men det er selvfølgelig ikke derfor det ikke virker)
:) mange tak for din vedholdenhed. Du har virkelig været til stor hjælp.
Jeg roder videre med koden i juledagene.
Rigtig glædelig jul.
Kivig
Synes godt om
Ny brugerNybegynder
Din løsning...
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.