# Kontrollstrukturen



## Kathi3210 (23. Nov 2011)

Hallo,
ich stehe bei der folgenden Aufgabe etwas auf dem Schlauch...
vielleicht kann mir jemand helfen, wäre nett...danke

Schreiben Sie ein Java Programm, bei dem der Benutzer drei int-Werte a, b und c eingibt.
Sortieren Sie diese Werte mittels if-Abfragen so, dass a < b < c gilt. Geben Sie am Schluss
die Werte von a, b und c aus. Prüfen Sie Ihr Programm mit den sechs möglichen
Permutationen der Zahlen 1, 2, 3 – Ihr Programm muss in allen Fällen „1, 2, 3“ ausgeben.
Hinweis: da höchstens drei Vertauschungen erforderlich sind, genügen drei if-Abfragen!


----------



## SlaterB (23. Nov 2011)

kannst du irgendwas beitragen, 
allein die Eingabe + Ausgabe,
allein die Variablendeklaration,
eine Klassendefinition?..


----------



## Kathi3210 (23. Nov 2011)

```
int a;
int b; 
int c;

if(a>b>c) 
if(a<b>c)
```
usw. 
mache ich das mit true und false?

ich weiß ehrlich gesagt nicht, wie ich das sortieren soll...
wie gesagt, ich hab eigentlich gar keinen plan...


----------



## SlaterB (23. Nov 2011)

du kannst immer nur zwei Werte vergleichen und dann diese vertauschen,
fange damit an, a und b zu vergleichen und gegebenenfalls zu vertauschen, danach überlege weiter was noch nötig ist

> mache ich das mit true und false?

mache doch einfach 10 oder 20 Dinge, schaue dir die Fehlermeldungen an usw.,
wenn du einzelne Vergleiche noch nicht kennst, dann übe die vorher in separaten Problemen, 
denke nicht gleich über drei Variablen gleichzeitig nach, 2 statt 3 sind schon einfacher


----------



## Kathi3210 (23. Nov 2011)

```
int a;
int b;
int c;

if((a<b)&(b<c)&(a<c))
```

also quasi erst mal so?
aber wie kann ich das dann auf 1, 2 und 3 übertragen?


----------



## Plopo (23. Nov 2011)

Wie wäre es, wenn du den variablen die Werte zuordnest?

a=2
b=3
c=1

Da aber in der Aufgabe steht "bei dem der Benutzer drei int-Werte a, b und c eingibt" musst du wohl per "Scanner" Klasse die Tastatureingabe den Variablen a-c zuweisen.

Hier ist die Doc für die Klasse

PS: Wenn a<b und b<c muss du nicht mehr a<c abfragen ;D


----------



## SlaterB (23. Nov 2011)

@Kathi3210
vergiss vorerst wirklich 3 Variablen, denke nur an 2, verschaue diese beiden


----------



## Kathi3210 (23. Nov 2011)

*Hinweis: da höchstens drei Vertauschungen erforderlich sind, genügen drei if-Abfragen!
*

aber was ist dann die dritte if- Abfrage?^^
und der Benutzer soll ja die werte eingeben, wie gebe ich dann die Werte aus??...


----------



## Kathi3210 (23. Nov 2011)

also a = InputTolls.readInteger()
      b = ....
?


----------



## SlaterB (23. Nov 2011)

siehe auch mein Posting zwischendurch

> aber was ist dann die dritte if- Abfrage?^^
das ist was kompliziertes, von dem du noch sehr weit entfernt bist, versuche dich vorher an einfachen Dingen

> wie gebe ich dann die Werte aus??... 
immer aller aller ersten Hello Wold-Programm lernt man schon die Ausgabe


> also a = InputTolls.readInteger()
> b = ....

nicht genauso? 
InputTolls oder InputTools kennt hier übrigens niemand, dazu kann dir keiner was sagen


----------



## Kathi3210 (23. Nov 2011)

könnt ihr mir ne Seite empfehlen, so sowas gut erklärt wird? ich find nichts treffendes


----------



## SlaterB (23. Nov 2011)

Benutzereingaben einlesen ist wahrlich kein gutes Kapitel in Java, und ist zum Testen sowieso schlecht, man müsste ständig tippen,
programmiere lieber alles erstmal mit im Quellcode vorgegebenen Werten

zur Ausgabe gibt es mehr als System.out.println() kaum zu sagen

------

ich empfehle zum Einlesen nur ganze Zeilen zu lesen und dann im Programm weiterzuverarbeiten
Lesen von der Konsole
aber das dürfte sich mit deinen InputTools beißen


----------



## Kathi3210 (24. Nov 2011)

Hm ok, dann danke erstmal


----------



## Kathi3210 (25. Nov 2011)

Also ich hab da jetzt so ne art lösung, die auch funktioniert, aber ist das nicht zu einfach?


```
public class Kontrollstrukturen{
public static void main (String[]args){
int a = 1;
int b = 3;
int c = 2;

if ((a<b)&(b<c)) System.out.println(a+","+b+","+c);
else System.out.println("Fehler")
}
}
```


----------



## SlaterB (25. Nov 2011)

dein hauptsächliches Problem dürfte sein, dass es nicht der Aufgabenstellung entspricht,
du sollst die Werte sortieren, Variableninhalte gegebenenfalls vertauschen,
am Ende die Variablen genau in Reihenfolge ausgehen, weil sie dann sortiert sein sollen

wiederholte Tipps:
- dein ganzes Programm sollte kein & (oder sowieso den richtigen Operator &&) enthalten, in jedem if nur ein Vergleich zweiter Werte

- fange mit nur zwei Werten an, a und b,
ich werde nun zu keinem Posting mehr antworten in denen a, b und c auftauchen 
solange nicht zu a und b eine annehmbare Lösung besprochen wurde

-----

im übrigens schon schön dass es ein vollständiges Programm mit Klasse, Variablendeklaration, Beispielwerten und einer gewissen Ausgabe geworden ist, ein guter Anfang


----------



## qowaz (25. Nov 2011)

Nein, deine Lösung ist falsch...du sortierst die Werte nicht sondern gibts einfach einen Fehler aus falls die Bedingung nicht gilt.
Nehmen wir an a=3, b=2, c=1. Es soll gelten a<b<c, was im Moment nicht der Fall ist.
Also musst du die Werte sortieren. Dazu nimmst du am besten eine Hilfsvariable names temp und gehst z.B. wie folgt vor:


```
if(a>b){
  temp = a;
  a = b;
  b = temp;
}
```

Somit wäre a=2 und b=3, damit gilt schon mal a<b. Das ganze machst du jetzt entsprechend noch für c.


----------



## SlaterB (25. Nov 2011)

nur a und b ist nun geklärt..

> Das ganze machst du jetzt entsprechend noch für c. 

wobei es nun spannend ist, mit was c zu vergleichen ist, bisschen ausprobieren schadet nicht,
vielleicht hilft dabei der Hinweis aus der Aufgabenstellung: "da höchstens drei Vertauschungen erforderlich sind, genügen drei if-Abfragen!" 

drei einzelne ifs, mit jeweils einem Vergleich, jeweils einer Vertauschung, kein &&, keine Ausgabe im if, oder sonstige Kapriolen,
ein if ist gefunden, zwei ähnliche noch dazu


----------



## qowaz (25. Nov 2011)

Es ist vllt auch hilfreich wenn du erst einmal auf einem Blatt Papier die verschiedenen Möglichkeiten notierst und durchspielst.


----------



## Kathi3210 (29. Nov 2011)

ich hab das jetzt mal rausbekommen, aber da wird bei println n fehler angezeigt


```
int a;
int b;
int c;

int temp;
if(a>b)
{

temp=a;
a=b;
b=temp;
}
if(b>c)
{

temp=b;
b=c;
c=temp;
}
if(a>b)
{

temp=a;
a=b;
b=temp;
}
printf(,a,b,c);
```


----------



## SlaterB (29. Nov 2011)

println taucht in deinem Code gar nicht auch, 

[c](,[/c] kann nie etwas sinnvolles sein

früher hattes du doch schon
> System.out.println(a+","+b+","+c);
ist das so schwer?

die drei Tausche sind aber gut


----------



## Kathi3210 (30. Nov 2011)

System.out.println meint ich eigentlich.... da wird jetzt a, b und c angestrichen
aber wie soll ich das programm mit den 6 möglichen permutationen von der zahlen 1,2,3 prüfen? ich kann ja nicht einfach 6x a=... b=--- und c=... hinschreiben


----------



## SlaterB (30. Nov 2011)

poste den gesamten Code,
und du sollst letzlich eine Benutzereingabe einbauen und 6x verschiedene Dinge eintippen,
du hattest hoffentlich schon vorher Programme mit Eingaben von Zahlen?


----------

