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

Status
Nicht offen für weitere Antworten.

Basko

Mitglied
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:

Java:
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] + ", ");
					
	}
	
}
 
Zuletzt bearbeitet von einem Moderator:

0din

Bekanntes Mitglied
Java:
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...
 

0din

Bekanntes Mitglied
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 ;)
 

Basko

Mitglied
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

Bekanntes Mitglied
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

Mitglied
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

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

Java:
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...
Code:
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
 

0din

Bekanntes Mitglied
Java:
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

Mitglied
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

Bekanntes Mitglied
Is ja keine arbeit wenn man weiß wies geht ;)

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

Basko

Mitglied
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.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben