# Meiern mit Java



## OlDirty (26. Okt 2012)

Es sollte folgende Aufgabe gelöst werden:

Verzweigungen und Wahrheitswerte

In einem Würfelspiel werden zwei Würfel verwendet. Aus den beiden Augenzahlen der Würfel soll die Punktzahl des Wurfes nach folgenden Regeln errechnet werden.

Die Reihenfolge der Augenzahlen soll immer die größere Augenzahl zuerst und dann die kleinere nennen.
2, 1 heißt "unschlagbar" und ergibt 1000 Punkte.
Zeigen beide Würfel die gleiche Augenzahl a, spricht man von einem Pasch. Dieser Pasch wird mit 100 * a Punkten bewertet. 5, 5 ergibt also 500 Punkte.
Für alle anderen Kombinationen wird die größere Augenzahl als Zehnerziffer und die andere als Einerziffer einer zweistelligen Zahl interpretiert. 3, 4 und 4, 3 ergeben also 43 Punkte.


Vorlage sieht wie folgt aus:

```
/**
 * Java 1 Aufgabe 3
 * Wurfbewertung
 *
 * @author <Ihr Name>
 */
class WurfBewertung {
    
    /**
     * Berechnet die Punkte für das Würfelspiel lt. Aufgabenstellung.
     * o Die Reihenfolge der Augenzahlen soll immer die größere Augenzahl 
     * zuerst und dann die kleinere nennen.
     * 
     * 2, 1 heißt "unschlagbar" und ergibt 1000 Punkte.
     * 
     * Zeigen beide Würfel die gleiche Augenzahl a, spricht man von einem Pasch.
     * Dieser Pasch wird mit 100 * a Punkten bewertet. 
     * 5, 5 ergibt also 500 Punkte.
     * 
     * Für alle anderen Kombinationen wird die größere Augenzahl als Zehnerziffer
     * und die andere als Einerziffer einer zweistelligen Zahl interpretiert. 
     * 3, 4 und 4, 3 ergeben also 43 Punkte.
     * 
     * @param args Augenzahlen der beiden Würfel
     */
    public static void main( String[] args) {
        int a = Integer.parseInt(args[0]);
        int b = Integer.parseInt(args[1]);
        
        System.out.println("Eingabe: "+a+" "+b);
        
        /* hier muss Ihr Proagrammteil hin. */
```

Kann mir da vielleicht jemand helfen, bin total überfragt


----------



## Solor (26. Okt 2012)

also zuerst schaust du mal, ob a größer, gleich, oder kleiner ist.
Wenn es gleich ist, ist es einfach, dann sind deine punkte ja einfach 100 * a.
Wenn es kleiner bzw größer ist, multiplizierst du die größere Zahl mit 10 und addierst die kleinere Zahl.
Zum Schluss überprüfst du noch, ob deine Punktzahl bei 21 liegt (das wäre der Fall "unschlagbar") und setzt deine punkte dann eben auf 1000.


----------



## Landei (26. Okt 2012)

Erst einmal den großen roten Hinweis mit den Java-Tags beachten.

Du hast dann verschiedene Fälle, die du abfragen musst. Ich würde dir empfehlen, erst einmal beide Werte zu ordnen:


```
...
int bigger = 0;
int smaller = 0;

if (a > b) {
   bigger = a;
   smaller = b;
} else {
   bigger = b;
   smaller = a; 
}

//Profi-Version mit ternärem Operator:
int bigger = a > b ? a : b;
int smaller = a > b ? b : a;
```

Dann halt die Fälle auseinanderklamüsern


```
if (bigger == 2 && smaller == 1) {
   //tu was
} else if (/*Wie testet man auf Pasch???*/) {
   //tu was
} else {  //Normalfall
   //tu was
}
```


----------



## TryToHelp (26. Okt 2012)

```
if (a==b) { // so testet man auf pasch kannst auch bigger==smaller nehmen
   //tu was
}
```


----------



## Spacerat (26. Okt 2012)

Ist nicht eigentlich 42 der höchste Wurf und dann erst 21 oder ist Meiern doch was anderes als Hamburger Pasch?
[Java]public int evaluatePoints(int wa, int wb) {
  if(wa < 1 || wa > 6 || wb < 1 || wb > 6) {
    throw new IllegalArgumentException("Mit solchen Wuerfeln spiele ich nicht!");
  }
  int a = Math.max(wa, wb);
  int b = Math.min(wa, wb);

  if(a == b) {
    return a * 100;
  }
  if(a == 4 && b == 2) {
    return 1000;
  if(a == 2) {
    return 750;
  }
  return a * 10 + b;
}[/code]
[EDIT] Waren das etwa Hausaufgaben?[/EDIT]


----------



## TryToHelp (26. Okt 2012)

Spacerat hat gesagt.:


> Ist nicht eigentlich 42 der höchste Wurf und dann erst 21 oder ist Meiern doch was anderes als Hamburger Pasch?
> [EDIT] Waren das etwa Hausaufgaben?[/EDIT]



Hä was ist Hamburger Pasch, ne Meier ist sowas wie Mäxchen und da ist nur die 21 hoch, dannach der 6,5,4,3,2,1 Pasch und dann 65,64,63,62,61,54,... und nach manchen Regeln hat man mit 31 doppelt verloren :-D

und ja waren würde ich sagen Hausaufgaben


----------



## Spacerat (26. Okt 2012)

Hamburger Pasch? Schau dir meine Methode an. Zur Not hilft auch Google bzw. Wikipedia.
Meiern ? Wikipedia
Frag' mich nur, warum der Name "Hamburger Pasch" seit Werner nicht mehr so geläufig ist. Vllt. liegts auch daran, das in Kneipen, wo man so etwas spielte, damals noch "echte Kerle" saßen, die mit solch verniedlichenden Namen wie "Mäxchen" nichts anfangen konnten. :lol:


----------



## Solor (26. Okt 2012)

wikipedia hat gesagt.:
			
		

> Gliederungspunkt Variationen:
> -Die 42 ist nicht eingereiht, sondern folgt erst nach der 21 und stellt damit den höchstmöglichen Wurf dar: 31, 32, 41, 43, 51, 52,     53, 54, 61, 62, 63, 64, 65, 11, 22, 33, 44, 55, 66, 21, 42. Sie wird dann „Doppelmeier“ oder „Doppelmäxchen“ bzw. „Hamburger!“ genannt. Bezeichnet jemand sie als „42“, so hat er sofort verloren.


Da stehts ja


----------



## ARadauer (26. Okt 2012)

Spacerat hat gesagt.:


> [EDIT] Waren das etwa Hausaufgaben?[/EDIT]


naja egal, wer sowas nicht schaft fliegt sowieso, schade eigentlich... die lehrer machen sich die mühe um interessante beispiele zu finden und die studies posten es einfach in ein form... wer keine lust hat zu programmieren soll bwl studieren ;-)



Spacerat hat gesagt.:


> ```
> if(a == 2) {
> return 750;
> }
> ```


trotzdem kann man drüber diskutieren.. das gefällt mir persönlich nicht.
dieser ausdruck beschreibt 21, weil du vorher sortiert und die pasch abgefragt hast.
aber die fachlichkeit der anforderung spiegelt sich für mich nicht wirklich im code wieder...
wie würde man es erklären. 21 ist das höchst, dann die pasch und dann der rest wo immer die höchste zahl zählt...

ich würds so schreiben..


```
public int evaluatePoints(int wa, int wb) {
		if (wa < 1 || wa > 6 || wb < 1 || wb > 6) {
			throw new IllegalArgumentException("Mit solchen Wuerfeln spiele ich nicht!");
		}
		int a = Math.max(wa, wb);
		int b = Math.min(wa, wb);

		//21
		if(a == 2 && b == 1){
			return 1000;
		}
		//pasch
		if (a == b) {
			return a * 100;
		}
		//rest..
		return a * 10 + b;

	}
```
das 42 oder 31 was besonderes ist spielen wir nicht..


----------



## TryToHelp (26. Okt 2012)

@ARadauer, ja deine Lösung sieht gut aus ;-)
@Spacerat, ja hätte ich machen können, ich entschuldige mich, das ich nicht erst google befragt habe oder deinen Code angeschaut habe, schande über mich. Also Hamburger Pasch war hier meines wissens nach nie geläufig, aber auch Meiern kenne ich nur durch Werner und ist hier garnicht geläufig, wenn man jemanden fragt, würde er es sicherlich nicht kennen. Hier heißt es schon immer Mäxchen, und es gibt noch so schöne viele Regelabwandlungen (z.B. ohne anschauen und dann mit sagen, dann reicht die selbe augenzahl oder mehr ohne würfeln, so kann man einen Pasch durchreichen,...)


----------



## OlDirty (26. Okt 2012)

"naja egal, wer sowas nicht schaft fliegt sowieso, schade eigentlich... die lehrer machen sich die mühe um interessante beispiele zu finden und die studies posten es einfach in ein form... wer keine lust hat zu programmieren soll bwl studieren."

Weil ich ja keine Lust zum Programmieren habe studiere ich auch Chemietechnik!!!

Doch unsere FH ist der Meinung, dass wir irgendwann in unserem Leben (nach nur einem Semester Java-Grundlagen) Zeit damit verbringen irgendwas zu schreiben.

Ich denke bei einem Stundenlohn von 25-30€ gibt es da Leute, die das 100x schneller und besser machen als wir, die nur die absoluten Basics lernen.


----------



## Solor (26. Okt 2012)

Das soll jetzt nicht bös gemeint sein, aber selbst das kriegt man schon mit basics hin. Ein paar if-else Verzweigungen; das war es ja dann auch schon. 
Und übrigens: Es gibt hier eine Zitat-Funktion


----------



## OlDirty (26. Okt 2012)

Solor hat gesagt.:


> Das soll jetzt nicht bös gemeint sein, aber selbst das kriegt man schon mit basics hin. Ein paar if-else Verzweigungen; das war es ja dann auch schon.
> Und übrigens: Es gibt hier eine Zitat-Funktion



Die hab ich irgendwie übersehen 

Wir hatten bis jetzt 3 Vorlesungen je 90min von denen vielleicht 90 Minuten wirklich Stoff waren und nicht Infos und Sonstiges zur Vorlesung selbst...

Und für einen "Chemikant" der sich zwar ein bischen mit Widows, Hardware und Office-Programmen auskennt ist jede Art von Programmieren absolutes Neuland.

Anwenden : gern !

Schreibe : nur weil wir dazu "gezwungen" werden


----------

