Nybörjare i java(väldigt ny)kan nån hjälpa mig men en sak.tack på förhand

Permalänk
Medlem

Nybörjare i java(väldigt ny)kan nån hjälpa mig men en sak.tack på förhand

Jag har problem med sista delen av uppgiften... nämligen att alla nollor ska vara sorterade på sätt där de
samlas alla på slutet av arrayen. till ex.
Nu flyttas alla 0'or sist!
Arrayen: 18 43 57 77 91 43 63 8 117 3 91 17 212 55 12 0 0 0 0 0
Min array har bara 10 platser.
PROBLEM :
att algoritm ändrar mig en siffra till 0! annars sorterar den bara bra. Undrar varför den gör så...?

själva sortering kod:
// sortering
System.out.print("sorterade nollor ");

int z = 0;
for ( x=0; x<arr.length; x++) {

for (int j=x; j<arr.length; j++) {

if (arr[z]<arr[j]){

z=j;
}

int temp = arr[x];
arr[x] = arr[z];
arr[z] = temp;
}

System.out.print(arr[z]) ;
}

Vid input till ex. 1 1 0 0 2 2 0 0 9 9 blir output 9 2 2 1 1 0 0 0 0 0 ????
Det skulle vara ju 9922110000 !
hmmm?
Här nere är hela uppgiften.

I denna uppgift skall ni göra några operationer på en array som innehåller heltal.
*Arrayen skall innehålla 20 stycken heltal och följande skall göras:

1. Läs in 20 stycken heltal som placeras i arrayen
2. Skriv ut arrayen
3. Leta upp det största talet i arrayen och skriv ut det talet
samt numret på rutan som talet fanns i.
*4. Fråga användaren efter ett intervall (t.ex. 10 - 20).
Ni skall sedan gå genom arrayen och nollställa alla värden
som ligger inom intervallet (om en viss ruta t.ex.
har värdet 18 och intervallet är som ovan så skall
den rutan få värdet 0).
Det skall fungera att ge intervallet i valfri ordning
(antingen 10 - 20 eller 20 - 10).
5. Skriv ut arrayen (så att det syns att rätt rutor
blivit nollställda!).
6. Se till så att rutorna som innehåller värdet 0 hamnar sist
i arrayen (ordningen på de andra talen är ointressant,
men alla 0'or skall stå sist).
7. Skriv ut arrayen igen (nu med 0'orna sist).

När ni gör denna uppgift kan en bra strategi vara att göra en liten del i taget,
testa att den delen fungerar, därefter göra en del till osv.

När programmet är klart skulle programdialogen kunna se ut ungefär så här:

Ange 20 tal: 18 43 57 21 77 91 25 28 43 63 8 117 3 91 22 17 212 29 55 12

Arrayen: 18 43 57 21 77 91 25 28 43 63 8 117 3 91 22 17 212 29 55 12

Största talet är 212 som finns i ruta nr 16

Intervallets första tal: 30
Intervallets andra tal: 20

Arrayen: 18 43 57 0 77 91 0 0 43 63 8 117 3 91 0 17 212 0 55 12

Nu flyttas alla 0'or sist!

Arrayen: 18 43 57 77 91 43 63 8 117 3 91 17 212 55 12 0 0 0 0 0

* @param args
*/

import java.util.*;
public class upp8c{

public static void main(String[]args){

Scanner scan = new Scanner(System.in);

int arr [] = new int[10];

System.out.print("Ange 10 olika heltal: ");

int x;
for( x=0; x<arr.length;x++){

arr[x] = scan.nextInt();

System.out.println("i array nr, index "+x+" ar siffra "+(arr[x])+" ");

}

// hitta den största i en array
int big = arr[0];

for (x=1;x<arr.length;x++){

if(arr[x]>big)

big = arr[x];

}
// hitta största index
for(x=0; x<arr.length; x++)

if (arr[x]==big)

System.out.println("Storst i arrayen ar "+big+"i position[] "+x );

// intervall

System.out.print("Ange tal1 :");
int tal1=scan.nextInt();

System.out.print("Ange tal2 :");
int tal2=scan.nextInt();

System.out.print("Nollstalld intervall: ");

for(x=0; x<arr.length; x++){

if(tal1 <= arr[x] && tal2>=arr[x]||tal1 >= arr[x] && tal2<=arr[x])

arr[x]=0;

System.out.print(+arr[x]);
}
System.out.println();

// sortering
System.out.print("sorterade nollor ");

int z = 0;
for ( x=0; x<arr.length; x++) {

for (int j=x; j<arr.length; j++) {

if (arr[z]<arr[j]){

z=j;
}

int temp = arr[x];
arr[x] = arr[z];
arr[z] = temp;
}

System.out.print(arr[z]) ;
}

System.out.println();
System.out.println("Arry length ar: "+x);

}
}

// sortering
System.out.print("sorterade nollor ");

int z = 0;
for ( x=0; x<arr.length; x++) {

for (int j=x; j<arr.length; j++) {

if (arr[z]<arr[j]){

z=j;
}

int temp = arr[x];
arr[x] = arr[z];
arr[z] = temp;
}

System.out.print(arr[z]) ;
}

Permalänk
Medlem

Nästan rätt på sorteringen men det räcker med x och j, ingen tredje variabel behövs för att byta plats på två tal. Sen så är det ju bara om den som ligger efter i arrayen är större som de ska bya plats.
Din kod sorterade inte över huvud taget utan råkade bara printa ut siffrorna i nästan rätt ordning.
Skriv ut arrayen efteråt istället för att göra det i loopen.

for (x = 0; x < arr.length; x++) { for (int j = x; j < arr.length; j++) { if (arr[x] < arr[j]) { int temp = arr[x]; arr[x] = arr[j]; arr[j] = temp; } } }

Visa signatur

I'm Winston Wolfe. I solve problems.