Stehe auf dem Schlauch.

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Guten Morgen!

Ich stehe wie gesagt gerade auf dem Schlauch und habe nur eine ganz kurze Frage:
Was muss ich nochmal mit "nums" und "addinum" machen, damit die main-Methode sie als Variablen der anderen Klasse Numbers in der Methode createNumbers erkannt wird? :oops:
Code:
class Lotto{

    public static void main(String[] args){

	System.out.println("Zahlen: ");
	for (int i = 0; i < 6; ++i){
	    System.out.print([u]nums[/u][i] + " ");
	}
	System.out.println();
	System.out.println("Zusatzzahl: " + [u]addinum)[/u];

    }
}
:autsch:
Danke..
 

WieselAc

Top Contributor
Am besten legst du dir ein Objekt der Klasse Numbers an.

Über dieses Objekt kannst du dann mit Hilfe von Getter-Methoden wie getNums() und getAddinum() auf deine Zahlen/Felder zurgreigefen

PS
Code:
Numbers number = new Numbers();

number.getNums()[i];

number.getAddinum();

Code:
public int[] getNums(){
    return nums;
}

public int getAddinum(){
    return addinum;
}
 

NTB

Bekanntes Mitglied
Wie sieht denn die Klasse Numbers genau aus?
Du musst irgendwie auf die Klasse Numbers zugreifen. Entweder über statische Methoden oder Du erzeugst Dir ein Objekt:
Code:
Numbers numbers = new Numbers();
und holst Dir dann über Methoden, wie z.B. getAddInum Deine Nummern...
Mehr Code hilft manchmal mehr.
 
G

Guest

Gast
(wird ein Lotto-Programm)
Code:
public class Numbers {
	
public static int[] createNumbers() {	
	int count = 0;
	int[] nums = new int[6];

	while (count < 6){
		int num = (int)Math.random() * 49 + 1;

		boolean newNum = true;						//Zahlen nicht doppelt
		for (int i = 0; i < count; ++i){
			if (nums[i] == num){
				newNum = false;
			}
		}

		if (newNum){
			nums[count++] = num;
		}
	}
	
	nums = Sort.sort(nums);

	int addinum = 0;								//Zusatzzahl
	boolean newNum = false;

	while (!newNum){
		addinum = (int)Math.random() * 49 + 1;

		newNum = true;
		for (int i = 0; i < 6; ++i){
			if (nums[i] == addinum){
				newNum = false;
			}
		}
	}
	return nums;
}
}
Wo genau muss ich denn das Objekt erzeugen?
 
G

Guest

Gast
Hallo!


Bitte lese die Benutzung von Methoden von anderen Klassen nach!

siehe auch:

http://www.galileocomputing.de/openbook/javainsel6/javainsel_03_001.htm


Nun die Anwendung:

Änderungen an der Klasse Number:


Code:
public class Numbers {
   
public static int[] createNumbers() {   
   int count = 0;
   int[] nums = new int[6];

   while (count < 6){
      int num = (int)Math.random() * 49 + 1;

      boolean newNum = true;                  //Zahlen nicht doppelt
      for (int i = 0; i < count; ++i){
         if (nums[i] == num){
            newNum = false;
         }
      }

      if (newNum){
         nums[count++] = num;
      }
   }
   
   nums = Sort.sort(nums);

   return nums;
}

public static int createAdditionNumber(int[] nums) {
   int addinum = 0;                        //Zusatzzahl
   boolean newNum = false;

   while (!newNum){
      addinum = (int)Math.random() * 49 + 1;

      newNum = true;
      for (int i = 0; i < 6; ++i){
         if (nums[i] == addinum){
            newNum = false;
         }
      }
   }
   
   return addinum;
}
}


Und hier die Hauptklasse:

Code:
class Lotto{

    public static void main(String[] args){

   int[] numbers =  Number.createNumbers();

   System.out.println("Zahlen: ");
   for (int i = 0; i < 6; ++i){
       System.out.print(numbers[i] + " ");
   }
   System.out.println();
   System.out.println("Zusatzzahl: " + Numbers.createAdditionNumber(numbers) );

    }
}

:wink:
 
G

Guest

Gast
Danke schonmal! Allerdings geht es trotzdem noch nicht..
Code:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
	The method createNumbers() is undefined for the type Number
	The method createAdditionNumber(int[]) is undefined for the type Numbers

	at Lotto.main(Lotto.java:5)

Code:
class Lotto{

    public static void main(String[] args){

   int[] numbers =  Number.[u]createNumbers[/u]();

   System.out.println("Zahlen: ");
   for (int i = 0; i < 6; ++i){
       System.out.print(numbers[i] + " ");
   }
   System.out.println();
   System.out.println("Zusatzzahl: " + Numbers.[u]createAdditionNumber[/u](numbers) );

    }
}
(Das Unterstrichene ist auch in Eclipse rot unterstrichen.)
 
G

Guest

Gast
Ok, das mit dem Unterstreichen hat nicht geklappt.

Habe den kleinen Vertipper bei createNumberS() ...entdeckt, müsste jetzt gehen, allerdings tut die createAdditionNumber() immernoch nicht:
"The method createAdditionNumber(int[]) in the type Numbers is not applicable for the arguments ()".
 
G

Guest

Gast
Hallo!

Sorry ein kleiner Verschereiber:

Code:
class Lotto{

    public static void main(String[] args){

   int[] numbers =  Numbers.createNumbers(); // war vorher Number

   System.out.println("Zahlen: ");
   for (int i = 0; i < 6; ++i){
       System.out.print(numbers[i] + " ");
   }
   System.out.println();
   System.out.println("Zusatzzahl: " + Numbers.createAdditionNumbers(numbers) );

    }
}

Hast Du die Klasse Numbers entsprechent geändert?
Und nochmals das Projekt gecleant?




:bahnhof:
 
G

Guest

Gast
Aaaah, das hat noch gefehlt! :idea:

Okay, jetzt sollte es eigentlich laufen, aber das tuts irgendwie nicht.. Es rechnet und rechnet und es kommt kein Ergebnis. Warum das??
 

NTB

Bekanntes Mitglied
Hehe, schau Dir nochmal die While Schleife und den Inhalt in folgendem Fall an:

1. Du erzeugst eine neue Zufallsnummer (diese ist schon im Array vorhanden)
2. Du setzt newNum auf true
3. Er geht in die for Schleife
4. Irgendwann geht er in das if und setzt newNum auf false.
Und dann?
 
G

Guest

Gast
Hallo!

ich habe mir die Klasse Numbers noch einmal angesehen:

Code:
int num = (int)Math.random() * 49 + 1;

erzeugt immer die Zahl 1

richtig ist

Code:
int num = (int)(Math.random() * 49 + 1); // Bitte die Klammern beachten!


:wink:
 

NTB

Bekanntes Mitglied
Ok, aber damit ist trotzdem nicht der von mir geschilderte Fall behoben, dass er in einer Endlosschleife landet. Von daher ist es gar nicht schlecht, erstmal dabei zu bleiben, dass immer die gleiche Zahl erzeugt wird :)
 
G

Guest

Gast
Boah! Es geht!
Danke!
I love you!
Blumen an alle!
:applaus:

Es ist getan. Ich habe fertig! (Jede Wahrheit braucht einen Mutigen, der sie ausspricht. BILD, oh du Bibel..!)
 
G

Guest

Gast
NTB hat gesagt.:
Ok, aber damit ist trotzdem nicht der von mir geschilderte Fall behoben, dass er in einer Endlosschleife landet. Von daher ist es gar nicht schlecht, erstmal dabei zu bleiben, dass immer die gleiche Zahl erzeugt wird :)

Also das stimmt schon so.
Klappt jetzt prima. Der Fehler war nur noch das mit den Klammern.
 

NTB

Bekanntes Mitglied
ach stimmt, hast recht. irgendwie dachte ich, dass dann keine neue zufallszahl generiert wird.
 
G

Guest

Gast
Hab noch ne Frage:
Wie bekomm ich denn meine Zahlen umgekehrt sortiert?
Code:
public class Sort {

    public static int[] sort(int[] numbers){
    	int n = numbers.length;
    	int[] result = new int[n];

    	int max_pos = 0;
    	for (int i = 0; i < n; ++i){

    		int pos = 0;
    		while (pos < max_pos && numbers[i] > result[pos]){
    			pos++;
    		}

    		for (int j = max_pos; j > pos; --j){
    			result[j] = result[j - 1];
    		}
    		max_pos++;

    		result[pos] = numbers[i];
    	}

    	return result;
    }
}
Muss ich dazu in die while oder in die for danach eingreifen? Ich muss nämlich zugeben, den Algoritmus nicht 100%ig zu verstehen..
 

NTB

Bekanntes Mitglied
anstatt das Rad neu zu erfinden könntest Du das hier nutzen:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Arrays.html#sort(T[],%20java.util.Comparator)
und dir dafür einen Comparator schreiben.
 
G

Guest

Gast
Danke für den Hinweis, aber ich möchte schon dabei bleiben. Es geht ja hauptsächlich drum, den Algoritmus besser zu verstehen
 

Freddy01010

Mitglied
Hallo!

Ich habe die Klasse bei mir ausprobiert.

Die Sortierung erfolgt wie erwartet.

Im Ergebnisarray ist der kleinste int Wert bei Index 0 und der größte Wert bei Index (lenght - 1)?!

Welche Funktionalität hast Du denn erwartet?


???:L
 
G

Guest

Gast
Ja klar, er funktioniert so wie er soll, Zahlen von klein nach groß ausgeben. Jetzt möchte ich einfach die Zahlen in umgekehrter Reihenfolge sortieren, von groß nach klein.
 

Ariol

Top Contributor
Lauf das Array doch einfach rückwärts durch....

for(int i = array.length-1; i >= 0; i--)
{
System.out.println(array);
}
 

NTB

Bekanntes Mitglied
Anonymous hat gesagt.:
Muss ich dazu in die while oder in die for danach eingreifen? Ich muss nämlich zugeben, den Algoritmus nicht 100%ig zu verstehen..

Also ich versteh Dich nicht. Du wartest hier jetzt seit drei Stunden sehnsüchtig auf eine Antwort, denn sobald eine Antwort kommt, beantwortest Du sie wieder.
In der Zeit hättest Du erstens einfach mal die obige Frage durch ausprobieren beantworten könne und Dir zweitens auch den Algorithmus Schritt für Schritt anschauen können.

Nun gut, ich habe den Algorithmus auch auf anhieb nicht so ganz im Detail verstanden. Musste ich aber auch nicht: Ich habe mir einfach Deinen Code kopiert, ein Zeichen umgedreht und hatte das Array abwärts sortiert... das hat mit kopieren Deines Codes, erstellen eines kleinen Testarrays und ausführen etwa 60 Sekunden gedauert.

/Edit: Das soll jetzt nicht heissen, dass ich der Überchecker bin, sondern einfach nur, dass Du doch ganz offensichtlich schon die richtige Idee hattest und dann einfach nur noch kurz ausprobieren müsstest, stattdessen aber drei Stunden lang darauf wartest, dass sich jemand anders in Dein Problem hineindenkt. Und das versteh ich einfach nicht...
 
G

Guest

Gast
Tut mir leid, wenn ich zu dumm bin, aber ich habe das richtige Zeichen wohl noch nicht bekommen.
Und um mich mal zu rechtfertigen, wann und wie oft ich hier reinschaue: Ich mache auch noch andere Dinge nebenher und aktualisiere einfach meinen Java-Foren-Tab immer mal wieder.
 

NTB

Bekanntes Mitglied
auf und ab

Code:
while (pos < max_pos && numbers[i] > result[pos])


Code:
while (pos < max_pos && numbers[i] < result[pos])
 

NTB

Bekanntes Mitglied
Dein Sortierungsalgorithmus funktioniert folgendermassen:

erst wird ein result-array erzeugt.
dann wird die erste/nächste zahl aus dem numbers-array genommen, und in der while-schleife geschaut, an welcher stelle sie in dem result array stehen müsste.

daraufhin werden, wenn nötig, in der for-schleife alle zahlen im result-array soweit nach unten/oben verschoben, bis die aktuelle zahl an der entsprechenden stelle eingefügt werden kann.


übertragen kann man sich das vielleicht wie einen stapel t-shirts vorstellen, der nach farben sortiert werden soll:
ich nehme von meinem originalstapel das erste t-shirt und lege es auf den neuen stapel. dann nehme ich das zweite und lege es nach sortierreihenfolge oben oder unten auf den neuen stapel.
die nächsten t-shirts schiebe ich dann an der nach Sortierung entsprechenden Stelle in den Stapel rein. Angenommen ich habe auf dem neuen Stapel jetzt 7 T-Shirts liegen, dann suche ich die Stelle, wo mein aktuelles T-Shirt reinpasst und schiebe es da auch rein. Unten drunter sind immer noch die gleichen T-Shirts, aber der ganze Stapel wird um ein T-Shirt nach oben geschoben.


/Edit:
Ich habe mir das einfach im Debugger von Eclipse angeschaut. Einen Breakpoint am Anfang der Methode setzen und das Result-Array aufgeklappt. Dann Schritt für Schritt mit F6 ausgeführt und geschaut, was passiert. Dazu den Code hinterher ein bischen anschauen und eins und eins zusammenzählen.
Besonders performant ist dieser Algorithmus nicht. Ich bin jetzt kein Mathespezialist, aber ich habe das Gefühl, dass selbst ein Bubblesort da im Mittel schneller sein müsste.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben