25 juni 2009

Java-bubbel

Svarade på ett inlägg på http://www.javaforum.se/jforum/ och för att göra det lättare för andra som sliter med liknande uppgifter på sina Java-kurser så postar jag lösningen på bloggen också.


import java.util.*;

public class Bubble{

private final static int maxNumber = 100;
private int[] numberArray;
private int numberIndex;
private Scanner sc;
private boolean quit = false;

public void init(){
sc = new Scanner(System.in);
numberArray = new int[maxNumber];
numberIndex = 0;
}

public void printUserMessage(){
System.out.println("Write a few numbers.");
System.out.println("To sort the array, type ':S'");
System.out.println("To end the input and sort the array, type ':Q'");
System.out.println("To print the current array, type ':P'");
}


public void getUserInput(){

while(numberIndex < maxNumber && !quit)
{
// If the user has entered a number, call the getNumber-method.
if(sc.hasNextInt()){
getNumber();
} else {
// If not, get the string.
getCommand();
}


}

}


private void getNumber(){
numberArray[numberIndex] = sc.nextInt();
numberIndex++;
}

private void getCommand(){
String command = sc.next();
if(command.startsWith(":")){
char commandChar = command.charAt(1);

switch(commandChar){
case 'Q':
bubbleSort();
printArray();
quit = true;
break;
case 'P':
printArray();
break;
case 'S':
bubbleSort();
break;
default:
printUserMessage();
}

}
}

private void printArray(){
System.out.print("[");
for(int number: numberArray){
System.out.print(number + " ");
}
System.out.println("]");
}

public void bubbleSort(){
boolean changeHasHappened = true;

while(changeHasHappened){
changeHasHappened = false;
for(int i = 0; i < numberIndex-1; i++)
if(numberArray[i] > numberArray[i+1]){
int temp = numberArray[i];
numberArray[i] = numberArray[i+1];
numberArray[i+1] = temp;
changeHasHappened = true;
}
}
}

public static void main (String[] arg){
Bubble b = new Bubble();
b.init();
b.printUserMessage();
b.getUserInput();

}

}

Inga kommentarer: