Pillar på en sak o vill se hur ni andra med lite mer erfarenhet skulle göra detta:
Skapa en lottorad som genererar 7st olika tal mellan 1 o 35 (listas i storleksordning).
Med hjälp av en förbestämd lottorad kunna jämföra med den genererade samt visa antal rätt.
The Lottoslumper:
{vars }
lottoArr[7] : integer
i : integer
j : integer
f : boolean
lottonum : integer
CODE BEGIN
i <- 0
WHILE i < 7 DO
j <- 0
f <- 1
lottonum <- RANDOM(0-35)
WHILE j < i DO
IF lottonum EQUALS lottoArr[j] AND i > 0 THEN
i <- i - 1
f <- 0
j <- j + 1
IF f DO
lottoArr[i] <- lottnum
i <- i + 1
QUICKSORT(lottoArr)
CODE END
Har suttit o pillat lite o det ordnade sig typ ;)
Men vet inte vad "quicksort" e. Skulle nån kunna visa?
Sedan ska jag bara kolla hur många rätt man har men det e väl samma princip som föregående loop? ;)
public class inlamn {
public static void main(String[] args) {
int i, j, lottonummer; //Deklarerar i, j & lottnummer
int minArr[] = new int[7]; //Skapar Arrayen minArr med 7st platser, samt ger dom värden
minArr[0] = 11;
minArr[1] = 25;
minArr[2] = 8;
minArr[3] = 2;
minArr[4] = 31;
minArr[5] = 23;
minArr[6] = 17;
int lottoArr[] = new int[7]; //Skapar Arrayen lottoArr med 7st platser
System.out.print("Din rad: ");
i = 0;
while ( i < minArr.length )
{
System.out.print(minArr[i] + ", ");
i++;
}
System.out.println();
System.out.print("Den genererade lottoraden: ");
i = 0;
while ( i < lottoArr.length ) //Kör medans i är mindre än lottArr som är 7
{
j = 0; // Ge j värdet 0
lottonummer = 1 + (int)(35 * Math.random()); //Slumpa fram ett nummer mellan 1 & 35
while ( j < i && i > 0 ) //Kör medans j är mindre än i och i är större än 0
{
if ( lottoArr[j] == lottonummer ) //Om lottoArr med värdet för i är samma som lottnummer
{
lottonummer = 1 + (int)(35 * Math.random()); //Slumpa fram ett nummer mellan 1 & 35
if ( j > 0 )
{
j--; //Sänker värdet på j med 1
}
}
else
{
j++; //Höjer värdet på j med 1
}
}
lottoArr[i] = lottonummer; //Ger lottoArr med värdet för i värdet från lottonummer
System.out.print(lottoArr[i] + ", "); //Skriver ut lottoArr med värdet för i
i++; //Höjer värdet på i med 1
}
System.out.println();
System.out.print("Du hade alltsa: ");
//Slut på filen
}}
Om du kollar lite i java api'ets dokumentation ( http://java.sun.com/j2se/1.4.1/docs/api/ ) och då under java.util / Class arrays så hittar du en drös med sort(..) . Dessa baseras på quicksort algoritmen.
Förstår mig inte på det där med sort pga. att man e n00b på det hela ;)
Hittade nåt hur man sorterade typ men hajjade inte ett skit hur man fixade det...
Nån som kan hjälpa en stackare? ;)
public class inlamn {
public static void main(String[] args) {
int i, j, lottonummer; //Deklarerar i, j & lottnummer
int minArr[] = new int[7]; //Skapar Arrayen minArr med 7st platser, samt ger dom värden
minArr[0] = 11;
minArr[1] = 25;
minArr[2] = 8;
minArr[3] = 2;
minArr[4] = 31;
minArr[5] = 23;
minArr[6] = 17;
int lottoArr[] = new int[7]; //Skapar Arrayen lottoArr med 7st platser
System.out.print("Din rad: ");
i = 0;
while ( i < minArr.length )
{
System.out.print(minArr[i] + ", ");
i++;
}
System.out.println();
System.out.print("Den genererade lottoraden: ");
i = 0;
while ( i < lottoArr.length ) //Kör medans i är mindre än lottArr som är 7
{
j = 0; // Ge j värdet 0
lottonummer = 1 + (int)(35 * Math.random()); //Slumpa fram ett nummer mellan 1 & 35
while ( j < i && i > 0 ) //Kör medans j är mindre än i och i är större än 0
{
if ( lottoArr[j] == lottonummer ) //Om lottoArr med värdet för i är samma som lottnummer
{
lottonummer = 1 + (int)(35 * Math.random()); //Slumpa fram ett nummer mellan 1 & 35
if ( j > 0 )
{
j--; //Sänker värdet på j med 1
}
}
else
{
j++; //Höjer värdet på j med 1
}
}
lottoArr[i] = lottonummer; //Ger lottoArr med värdet för i värdet från lottonummer
System.out.print(lottoArr[i] + ", "); //Skriver ut lottoArr med värdet för i
i++; //Höjer värdet på i med 1
}
System.out.println();
System.out.print("Du hade alltsa: ");
//Slut på filen
}
}
Hehe... bara för att jag har tråkigt idag så skrev jag ihop en QuickSort... Det finns ett liiiitet fel med den... ;-)
QuickSort.java
package lime.util;
import java.util.Vector;
/**
* QuickSort.java by Lime, 19 Mars 2003
*
* Algorithm designed by prof C. A. R. Hoare, 1962
*
* Rekursiv QuickSort, sorterar (delar av) en Vector genom att
* 1. Välja en 'pivot' (center på svenska), ett element att jämföra med
* 2. dela vectorn i två delar:
* - mindre än pivot
* - större än eller lika med pivot
* Ett element som är lika med pivot kan hamna i vilken del som helst.
* 3 Sortera delarna rekursivt tills det bara finns ett element kvar.
*/
public class QuickSort{
public void quickSort(Vector elements)
{ if (! elements.isEmpty())
{ this.quickSort(elements, 0, elements.size()-1);
}
}
private void quickSort(Vector elements, int lowIndex, int highIndex)
{ int lowToHighIndex;
int highToLowIndex;
int pivotIndex;
String pivotValue; // Har använt strängar i den här... Går att göra på annat sätt.
String lowToHighValue;
String highToLowValue;
String parking;
int newLowIndex;
int newHighIndex;
int compareResult;
lowToHighIndex = lowIndex;
highToLowIndex = highIndex;
/**
* Välj en pivot, kom i håg dess värde
* Inget specielt görs med pivot elementet.
* Den kommer att hanteras som vilket annat element som helst
*/
pivotIndex = (lowToHighIndex + highToLowIndex) / 2;
pivotValue = (String)elements.elementAt(pivotIndex);
/**
* Dela upp Vectorn i två delar.
*
* Den lägre delen blir lowIndex - newHighIndex,
* och innehåller element <= pivot värdet
*
* Den högre delen blir newLowIndex - highIndex,
* och innehåller element >= pivot värdet.
*/
newLowIndex = highIndex + 1;
newHighIndex = lowIndex - 1;
// loopa tills low möter hight
while ((newHighIndex + 1) < newLowIndex) // loopa till delen är klar
{ // loopa från low till high för att hitta element att swapa
lowToHighValue = (String)elements.elementAt(lowToHighIndex);
while (lowToHighIndex < newLowIndex
& lowToHighValue.compareTo(pivotValue)<0 )
{ newHighIndex = lowToHighIndex; // lägg till element till lägre delen
lowToHighIndex ++;
lowToHighValue = (String)elements.elementAt(lowToHighIndex);
}
// loopa från high to low för att hitta element att swapa.
highToLowValue = (String)elements.elementAt(highToLowIndex);
while (newHighIndex <= highToLowIndex
& (highToLowValue.compareTo(pivotValue)>0)
)
{ newLowIndex = highToLowIndex; // add element to higher part
highToLowIndex --;
highToLowValue = (String)elements.elementAt(highToLowIndex);
}
// swapa om det behövs.
if (lowToHighIndex == highToLowIndex)
{ newHighIndex = lowToHighIndex;
}
else if (lowToHighIndex < highToLowIndex) // inte sista elementet ännu...
{ compareResult = lowToHighValue.compareTo(highToLowValue);
if (compareResult >= 0) // low >= high, swapa, även om de är lika.
{ parking = lowToHighValue;
elements.setElementAt(highToLowValue, lowToHighIndex);
elements.setElementAt(parking, highToLowIndex);
newLowIndex = highToLowIndex;
newHighIndex = lowToHighIndex;
lowToHighIndex ++;
highToLowIndex --;
}
}
}
// Fortsätt rekursivt för alla delar som har mer än ett element.
if (lowIndex < newHighIndex)
{ this.quickSort(elements, lowIndex, newHighIndex); // sortera lägre delen
}
if (newLowIndex < highIndex)
{ this.quickSort(elements, newLowIndex, highIndex); // sortera högre delen
}
}
}
Testklass.
import javax.swing.*;
import java.awt.*;
import java.awt.image.*;
import java.util.*;
/**
*
* @author Lime
*/
public class TestMain extends javax.swing.JFrame {
Vector sv = new Vector();
/** Creates new form TestMain */
public TestMain() {
initComponents();
//JImageTextArea jita = new JImageTextArea("images/boat.gif");
//jita.setResize(true);
//this.getContentPane().add(jita);
sv.add("29");
sv.add("1");
sv.add("1000");
sv.add("40");
sv.add("91000");
sv.add("10000001");
sv.add("8000");
sv.add("14");
sv.add("101");
sv.add("12");
sv.add("14");
sv.add("1000");
sv.add("2");
jLabel1.setText(printVector(sv));
setSize(400,400);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
jButton5 = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
getContentPane().setLayout(new java.awt.GridBagLayout());
setTitle("MainWindow");
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
exitForm(evt);
}
});
jButton5.setText("Sortera");
jButton5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton5ActionPerformed(evt);
}
});
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 8;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.insets = new java.awt.Insets(10, 10, 10, 10);
gridBagConstraints.weightx = 1.0;
getContentPane().add(jButton5, gridBagConstraints);
jLabel1.setText("jLabel1");
getContentPane().add(jLabel1, new java.awt.GridBagConstraints());
pack();
}
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
// Add your handling code here:
lime.util.QuickSort qs = new lime.util.QuickSort();
qs.quickSort(sv);
jLabel1.setText(printVector(sv));
}
private String printVector(Vector v){
StringBuffer sb = new StringBuffer();
ListIterator iter = v.listIterator();
while(iter.hasNext()){
if (sb.toString().trim() != "")
sb.append(":");
sb.append((String) iter.next());
}
return sb.toString();
}
/** Exit the Application */
private void exitForm(java.awt.event.WindowEvent evt) {
System.exit(0);
}
/** Bla Bla
* @param args the command line arguments
*/
public static void main(String args[]) {
new TestMain().show();
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JButton jButton5;
// End of variables declaration
}
Tur att mitt skolprojekt är frivilligt annars hade det inte varit ngn match! Har Ni som kan Java några bra siter på lager, om Java programering som är grundläggande + gärna på svenska? :stud