# Bestimmen ob Zahlen Reihe sotiert ist oder unsortiert



## Prenses (8. Dezember 2010)

Ich soll mit einem Array bestimmen ob die eingegebene Zahlenreihe absteigend oder aufsteigend ist .. ich komm nicht weiter bei der prüfung ob zb der letzte wert der größte bzw der kleinste von der zahlenreihe ist.. weiß vllt jemand weiter. hier mein versuch:


```
import java.util.*;
public class aufg7_3 
{	
	public static void main (String [] args)
	{
	
		boolean check = false;
		int wert = 0;
		int i;
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("Wie soll geprueft werden? Druecke 1 fuer aufsteigend, 2 fuer absteigend");
		int x = sc.nextInt();
		while (x>4)
		{
			System.out.println("Bitte waehlen Sie nur: 1 fuer aufsteigend, 2 fuer absteigend,");
		}
			
		System.out.println("Wieviel Zahlen moechten Sie eingeben?");
		int zahl = sc.nextInt();
		
		int[] a = new int[zahl]; 
		
		System.out.println("Geben Sie nun Ihre Zahlen ein");
		
		for(i = 0; i<=a.length-1; i++)
		{
			wert = sc.nextInt();
			
			a[i] = wert;
		}
		
		
		switch(x)
		{
			case 1:
				for(int w = 0; w <= zahl; w++)
				{
					if(a[1]<=a[max])
					a[1]++;
					{
					check = true;
					System.out.println(check); //("Deine Zahlen Reihenfolge ist " + check + " und somit aufsteigend sortiert");
					}
				}
				break;
			case 2:
				if(a[0]>=a[1])
				{		
					check = true;
					System.out.println("Deine Zahlen Reihenfolge ist " + check + " und somit absteigend sortiert");
				}
				else
				{
					check = false;
					System.out.println("Deine Zahlen Reihenfolge ist " + check + " und somit nicht absteigend sortiert");
				}
				break; }}
```

ab switch wirds dann kritisch :S


----------



## riddler16 (8. Dezember 2010)

Nabend,

ok fangen wir mal an 
1. warum läuft die while Schleife falls x größer 4 ist? Sollte da nicht, wenn man das überhaupt so macht, höchstens 2 stehen?

2. du vergleichst das erste Element des Arrays mit einem Element a[max] aber max ist garnicht definiert
Das ist aber im Grunde egal, weil der Vergleich an sich so nicht klappen kann.

Wenn du z.B. eine Zahlenfolge hast: 1,2,5,4, dann musst du im ersten Schritt schauen ob die erste Ziffer kleiner als alle anderen sind-falls nein, kannst du direkt abbrechen. Falls ja, muss das gleiche mit der zweiten Ziffer für alle folgenden Ziffern erfolgen. Also bei der 2 wären das die Test ob 2<5 und dann 2<4 ist. Danach geht es mit der nächsten Ziffer weiter usw.

Falls du nämlich immer nur überprüfst, ob das aktuelle Element kleiner als das größte/letzte im Array ist, kann es ja trotzdem passieren, dass alle Ziffern kleiner als die letzte Ziffer sind, es sich jedoch nicht um eine aufsteigende Folge handelt: z.B. 1,4,2,5

Daraus folgt, dass du zwei Schleifen benötigst. Die erste-äußere-läuft so häufig, wie es Elemente im Array gibt. Die zweite-innere-überprüft das oben beschriebene

Das gilt jetzt natürlich nur für den "aufsteigenden" Fall. Absteigend ist es analog zu lösen.

Man kann übrigens mit Arrayname.length auf die Anzahl der Elemente im Array zugreifen. Also in deinem Fall wäre es a.length was bei einem Array von 1,4,2,5 dir eine 4 liefern würde.

Somit kannst du deine Schleife wie folgt machen:

```
//äußere Schleife
for(int i = 0; i < a.length-1; i++){
  //innere Schleife
  for(int j = i+1; j < a.length; j++){
    //check
    if( a[i] < a[j] ){
    ...   
    }
  }
}
```


----------



## MiMi (8. Dezember 2010)

Benutz doch bitte java-codetags. Danke


----------



## Prenses (8. Dezember 2010)

@riddler16:
Danke^^ naja ich hatte ein paar komische Fehler drinne weil ich auch als 3. Möglichkeit alternierend eingeben wollte. Jetzt klappt es, ist zwar etwas lang :S aber wenn ihr wollt auf eine kürzere Lösung würd ich mich freuen.


```
import java.util.*;
public class aufg7_3 
{	
	public static void main (String [] args)
	{
	
		boolean check = false;
		boolean check2 = false;
		boolean check3 = false;
		int wert = 0;
		
		Scanner sc = new Scanner(System.in);
		
		System.out.println("Wie soll geprueft werden? Druecke 1 fuer aufsteigend, 2 fuer absteigend, 3 fuer alternierend");
		int x = sc.nextInt();
		while (x>3)
		{
			System.out.println("Bitte waehlen Sie nur: 1 fuer aufsteigend, 2 fuer absteigend, 3 fuer alternierend");
			x = sc.nextInt();
		}
			
		System.out.println("Wieviel Zahlen moechten Sie eingeben?");
		int zahl = sc.nextInt();
		
		int[] a = new int[zahl]; 
		
		System.out.println("Geben Sie nun Ihre Zahlen ein");
		
		for(int i = 0; i<=a.length-1; i++)
		{
			wert = sc.nextInt();
			
			a[i] = wert;
		}
		
		
		switch(x)
		{	
			case 1:
				for(int b = 0; b < a.length-1; b++) // äußere Schleife
				{ 
					for(int j = b+1; j < a.length; j++) // innere Schleife
					{
						if( a[b] <= a[j] ) // check
						{
						check = true;					
						}
						else
						{
						check = false;
						}
					}
					
					if(check == false)
					{
						System.out.println(check + ": Ihre Zahlenfolge ist nicht aufsteigend geordnet");
						break;
					}
					else
					{	
						continue;
					}
				}
				if (check == true)
				{
					System.out.println(check + ": Ihre Zahlenfolge ist aufsteigend geordnet");
				}
				break;
			case 2:
				for(int b = 0; b < a.length-1; b++) // äußere Schleife
				{ 
					for(int j = b+1; j < a.length; j++) // innere Schleife
					{
						if( a[b] >= a[j] ) // check
						{
						check = true;					
						}
						else
						{
						check = false;
						}
					}
					
					if(check == false)
					{
						System.out.println(check + ": Ihre Zahlenfolge ist nicht absteigend geordnet");
						break;
					}
					else
					{	
						continue;
					}
				}
				if (check == true)
				{
				System.out.println(check + ": Ihre Zahlenfolge ist absteigend geordnet");
				}
				break;				
			case 3:		
			// Gedanke: Wenn Zahlenreihe aufsteigend oder absteigend ist, dann ist sie nicht alternierend
			
				for(int b = 0; b < a.length-1; b++) // absteigende Zahlenreihe
				{ 
					for(int j = b+1; j < a.length; j++)
					{
						if( a[b] > a[j] ) // check
						{
						check = true;					
						}
						else
						{
						check = false;
						}										
					}
					
					if(check == false)
					{
						break;
					}
					else
					{	
						continue;
					}
				}
				for(int c = 0; c < a.length-1; c++) // aufsteigende Zahlenreihe
				{ 
					for(int m = c+1; m < a.length; m++)
					{
						if( a[ c] < a[m] ) // check
						{
						check2 = true;					
						}
						else
						{
						check2 = false;
						}
					}
					
					if(check2 == false)
					{
						break;
					}
					else
					{	
						continue;
					}
				}
				
				if (check == true || check2 == true)
				{
					check3 = false;
					System.out.println(check3 + " Ihre Zahlenfolge ist nicht alternierend geordnet");
				}
				else
				{
					check3 = true;
					System.out.println(check3 + " Ihre Zahlenfolge ist alternierend geordnet");
				}
				break;
                      default:
                                break;
		}
	} 		
}
```


----------

