# Hilfe Probleme bei der Hausaufgabe! Kann mir vielleicht irgendwer behilflich sein?



## Basko (7. Dez 2009)

Aufgabenstellung ist folgende:

Schreiben Sie ein Programm, das in einem array mit int-Werten alle Vorkommen von negativen Zahlen nach vorn tauscht. Das Programm soll vom Benutzer array-Länge und Inhalt erfragen und das array in ursprünglicher und in modifizierter Gestalt ausdrucken. Sie dürfen keine Hilfsarrays anlegen.
Hinweis: Benutzen Sie eine Schleifeninvariante, der entsprechend das Feld aus drei Teilen besteht: aus einem schon bearbeiteten Anfangsteil aus negativen Zahlen, einem Endteil aus nicht-negativen Zahlen und einem noch nicht betrachteten Mittelteil. (< 0   |    ????    |    >= 0)

;(Leider macht das Programm das ich geschrieben habe gar nichts außer des einlesens des Arrays. Es wird zwar kompiliert, aber es geschieht nichts. Habe durch das einfügen von ein paar Ausgaben versucht dahinter zu kommen was passiert während es läuft, doch es wird nicht mal was ausgegeben (in der Schleife). Mein Lösungsansatz bis jetzt:


```
public class Aufgabe
{
	public static void main (String [] args)
	{
	int n, hilf1, hilf2, zaehler1, zaehler2;
	
	System.out.println ();
	System.out.println ("Geben Sie die Laenge des arrays ein!");
	n = SavitchIn.readLineInt ();
	System.out.println ();
	
	int arr [] = new int [n];
	zaehler2 = 0;
	hilf1 = 0;
	hilf2 = 0;
	
		for (int spalte = 0; spalte < n; spalte++)		//Eingabe des Arrays
		{
			System.out.println ("Geben Sie die " + (spalte+1) + ". Zahl ein!");
			arr [spalte] = SavitchIn.readLineInt ();
		}
		
		System.out.println ("Array in der urspruenglichen Form: ");
		
		for (int i = 0; i < n; i++)						//Ausgabe Array ursprünglich
		{
			System.out.print (arr [i] + ", ");
		}
		System.out.println ();
		
				
		for (int anf = 0; anf < zaehler2; anf++)				//von vorne nach einer positive Zahl suchen
		{	
			zaehler1 = anf;
			if (arr [zaehler1] > 0)
				hilf1 = arr [anf];
				
				for (int end = arr.length; end > zaehler1; end--)		//von hinten nach einer nagativen Zahl suchen
					zaehler2 = end;
					if (arr [zaehler2] < 0)
												
						hilf2 = arr [zaehler2];							//tauschen von positiven + negativen Zahlen
						arr [zaehler2] = arr [arr.length-(zaehler1+zaehler2)];
						arr [arr.length-(zaehler1+zaehler2)] = hilf2;                
						
						
		}			
				System.out.println (hilf1);
				System.out.println (hilf2);
												//wenn in der Mitte nichts mehr da steht Ausgabe des Arrays
			System.out.println ("Array sortiert: ");
		
			for (int j = 0; j < n; j++)
				System.out.print (arr [j] + ", ");
					
	}
	
}
```


----------



## 0din (7. Dez 2009)

```
public class Aufgabe
{
public static void main (String [] args)
{
int n, hilf1, hilf2, zaehler1, zaehler2;

System.out.println ();
System.out.println ("Geben Sie die Laenge des arrays ein!");
n = SavitchIn.readLineInt ();
System.out.println ();

int arr [] = new int [n];
zaehler2 = 0;
hilf1 = 0;
hilf2 = 0;

for (int spalte = 0; spalte < n; spalte++) //Eingabe des Arrays
{
System.out.println ("Geben Sie die " + (spalte+1) + ". Zahl ein!");
arr [spalte] = SavitchIn.readLineInt ();
}

System.out.println ("Array in der urspruenglichen Form: ");

for (int i = 0; i < n; i++) //Ausgabe Array ursprünglich
{
System.out.print (arr [i] + ", ");
}
System.out.println ();


for (int anf = 0; anf < zaehler2; anf++) //von vorne nach einer positive Zahl suchen
{
zaehler1 = anf;
if (arr [zaehler1] > 0)
hilf1 = arr [anf];

for (int end = arr.length; end > zaehler1; end--) //von hinten nach einer nagativen Zahl suchen
zaehler2 = end;
if (arr [zaehler2] < 0)

hilf2 = arr [zaehler2]; //tauschen von positiven + negativen Zahlen
arr [zaehler2] = arr [arr.length-(zaehler1+zaehler2)];
arr [arr.length-(zaehler1+zaehler2)] = hilf2;


}
System.out.println (hilf1);
System.out.println (hilf2);
//wenn in der Mitte nichts mehr da steht Ausgabe des Arrays
System.out.println ("Array sortiert: ");

for (int j = 0; j < n; j++)
System.out.print (arr [j] + ", ");

}

}
```

Nur eben in Java-Tags gehaun...


----------



## Basko (7. Dez 2009)

Danke - bin neu hier weiß nicht wie das funktioniert.


----------



## 0din (7. Dez 2009)

Nu aber was sinniges XD

Die aufgabe sagt du darfst nur ein array gebrauchn un sollst die ganze sache doch sortieren.
Das erste was mir dazu in den sinn kommt wäre bubblesort... (du musst ja nich auf den hinweis achten) 

Zum code selbst,
du ließt dein array ein, druckst das ab, versuchst zu sortieren... klappt das drucken denn noch? 
davon abgesehn;
im mom suchst du vorne jede zahl einmal un machst dabei die abfrage ob se negativ is un rennst für jede zahl die du damit durchsuchst einmal von hinten nach vorne durch dein array... das is n wenig unnötig un viel


----------



## Ebenius (7. Dez 2009)

Basko hat gesagt.:


> Danke - bin neu hier weiß nicht wie das funktioniert.


Hab den Code eben formatiert und Dir eine Nachricht geschickt.

Wenn das Thema erledigt ist, dann bitte entsprechend markieren: http://www.java-forum.org/forum-faq-beitraege/86306-thema-erledigt-markieren.html

Ebenius


----------



## Basko (7. Dez 2009)

OK danke. Aber das was ich nicht ganz verstehe ist das mit dem Mittelteil. Wozu brauch ich den? Ich könnte ja genau so gut eine if-Bedingung einbauen, wenn die beiden Zähler (zaehler1==zaehler2) gleich groß sind, darauf dann sofort das Array ausgegeben wird, oder?


----------



## 0din (7. Dez 2009)

ich denke mal das die aufgabe einen teil für das originale array, einen teil für negative zahlen und einen teil für die positiven zahlen

wo läuft denn dein prog fest?


----------



## Basko (7. Dez 2009)

Hab es gerade geändert, daß es nur noch bis zur Mitte des Array läuft (n/2).

Wenn ich einen Array mit der Länge 5 eingebe: z.B. {1,2,3,-4,-5}

bekomme ich folgendes raus: {1,0,0,3,-5}


----------



## 0din (7. Dez 2009)

Ich habs ma eben umgeschriebn das des ding via scanner einließt:


```
import java.util.Scanner;

public class Aufgabe
{

	public static void main(String[] args)
	{
		int n, hilf1, hilf2, zaehler1, zaehler2;
		Scanner sc = new Scanner(System.in);

		System.out.println();
		System.out.println("Geben Sie die Laenge des arrays ein!");
		n = Integer.parseInt(sc.nextLine());
		System.out.println();

		int arr[] = new int[n];
		zaehler2 = 0;
		hilf1 = 0;
		hilf2 = 0;

		for (int spalte = 0; spalte < n; spalte++) // Eingabe des Arrays
		{
			System.out.println("Geben Sie die " + (spalte + 1) + ". Zahl ein!");
			arr[spalte] = Integer.parseInt(sc.nextLine());
		}

		System.out.println("Array in der urspruenglichen Form: ");

		for (int i = 0; i < n; i++) // Ausgabe Array ursprünglich
		{
			System.out.print(arr[i] + ", ");
		}
		System.out.println();

		for (int anf = 0; anf < zaehler2; anf++) // von vorne nach einer
													// positive Zahl suchen
		{
			zaehler1 = anf;
			if (arr[zaehler1] > 0)
				hilf1 = arr[anf];

			for (int end = arr.length; end > zaehler1; end--)
				// von hinten nach einer nagativen Zahl suchen
				zaehler2 = end;
			if (arr[zaehler2] < 0)

				hilf2 = arr[zaehler2]; // tauschen von positiven + negativen
										// Zahlen
			arr[zaehler2] = arr[arr.length - (zaehler1 + zaehler2)];
			arr[arr.length - (zaehler1 + zaehler2)] = hilf2;

		}
		System.out.println(hilf1);
		System.out.println(hilf2);
		// wenn in der Mitte nichts mehr da steht Ausgabe des Arrays
		System.out.println("Array sortiert: ");

		for (int j = 0; j < n; j++)
			System.out.print(arr[j] + ", ");

	}

}
```


du scheinst nochn fehler mit index 0 zu haben... 

```
Geben Sie die Laenge des arrays ein!
5

Geben Sie die 1. Zahl ein!
0
Geben Sie die 2. Zahl ein!
-10
Geben Sie die 3. Zahl ein!
-9
Geben Sie die 4. Zahl ein!
0
Geben Sie die 5. Zahl ein!
1
Array in der urspruenglichen Form: 
0, -10, -9, 0, 1, 
0
0
Array sortiert: 
0, -10, -9, 0, 1,
```

abgesehn davon arbeitet dein prog eig. schon


----------



## Basko (7. Dez 2009)

Danke. Bin immer noch auf der Suche von dem Fehler.


----------



## 0din (7. Dez 2009)

```
public class Sortierdings
{

	private int[] a;

	public Sortierdings()
	{
		a = new int[5];
		a[0] = 0;
		a[1] = 1;
		a[2] = 2;
		a[3] = -1;
		a[4] = -10;
	}

	public void sortieren()
	{
		boolean fertig = false;

		for (int i : a)
		{
			System.out.println(i + ", ");
		}
		System.out.println();

		for (int i = 0; i < a.length - 1; i++)
		{
			for (int j = 0; j < a.length - 1; j++)
			{
				if (a[j] > a[j + 1])
				{
					int tmp = a[j];
					a[j] = a[j + 1];
					a[j + 1] = tmp;
					fertig = false;
				}
				else
				{
					fertig = true;
				}
			}
		}

		for (int i : a)
		{
			System.out.println(i + ", ");
		}
	}

	public static void main(String[] args)
	{
		Sortierdings s = new Sortierdings();
		s.sortieren();
	}
}
```

Ich hab dir ma ebn bubblesort gebastelt... ließt keine zahlen ein un is mehr hin gehaun als echt gebaut aber damit haste n algo der nur ein array gebraucht un doch schön brav sortiert


----------



## Basko (7. Dez 2009)

vielen herzlichen Dank! Aber soweit ich das sehe ordnet das der Größe nach. ich soll ja die negativen Zahlen nach links und die positiven Zahlen nach rechts schieben. Ich denke mal ich finde den Fehler hoffentlich noch. Trotzdem ein GROßES DANKE für Deine Mühen!!!:toll:


----------



## 0din (8. Dez 2009)

Is ja keine arbeit wenn man weiß wies geht  

Wo war denn nu dein Fehler? ^^ ja ich bin neugierig...


----------



## Basko (8. Dez 2009)

Hab den Fehler leider immer noch nicht gefunden, aber das Problem zumindest eingegrenzt. Das Programm hängt in der 1. Schleife fest nach dem 1. Durchlauf. Hab schon probiert die Klammern anders zu setzen aber dann wirft der Compiler aus, daß manche Variablen nicht definiert sind.


----------

