Kein System.out

Lybrial

Bekanntes Mitglied
Heyho,

hab was merkwürdiges. Eine Klasse die tadellos das gesamte Programm durchläuft,
aber kein System.out.println macht. Hat da jemand ne Idee woran das liegen könnte?

Er arbeitet das Programm bis zum return durch, das hab ich getestet aber printen tut
er nichts:

Klasse Run
Java:
public class Run
{
	private String mZeichenkette;
	
	//*****Konstruktor***********************
	public Run(String aZeichenkette)
	{
		this.setZeichenkette(aZeichenkette);
	}
	//*****Konstruktor***********************
	//*****************************************************************************************************************************************
	public String Zeichenkette()
	{
		int stelle = 0, zeichenketteLaenge = 0, anzahlGleich = 0, anzahlGleichMax = 0;
		char zeichenAktuell = ' ', zeichenMax = ' ';
	
		zeichenketteLaenge = this.getZeichenkette().length();
		
		for (int i = 0; i < zeichenketteLaenge; i++)
		{
			if(this.getZeichenkette().charAt(i) != zeichenAktuell)
			{
				zeichenAktuell = this.getZeichenkette().charAt(i);
				anzahlGleich = 0;
			}
			anzahlGleich++;
			if(anzahlGleich > anzahlGleichMax)
			{
				stelle = i -anzahlGleich+2;
				anzahlGleichMax = anzahlGleich;
				zeichenMax = zeichenAktuell;
			}
		}
		System.out.println("Maximal Anzahl von gleichen Zeichen = " +anzahlGleichMax);
		System.out.println("Dieses Zeichen = " +zeichenMax);
		System.out.println("Stelle: " +stelle);
		return this.getZeichenkette();
	}
	//*****************************************************************************************************************************************
	private String getZeichenkette()
	{
		return mZeichenkette;
	}
	//*****************************************************************************************************************************************
	private void setZeichenkette(String aZeichenkette)
	{
		mZeichenkette = aZeichenkette;
	}
}
Test Klasse Run
Java:
import java.util.Scanner;

public class RunTest
{
	public static void main(String[] args)
	{
		Scanner input = new Scanner(System.in);
		
		System.out.print("Bitte eine Zeichenfolge eingeben: ");
		String test = input.nextLine();
		
		Run run = new Run(test);
	}
}
 
du erstellst dir dein Run objekt machst aber dann nix mehr.... wie hast du getestet dass er alles durchläuft, wenn du keine Methoden aufrufst ?
 
Die Methode Zeichenkette wird gar nicht aufgerufen. - Nach Java Code Conventions sollten Methodenamen mit einem Kleinbuchstaben anfangen und die Funktion der Methode beschreiben.
 
//*****Konstruktor***********************
//*****************************************************************************************************************************************
public String Zeichenkette()
nö.. das ist kein Konstruktor. ein Konstruktor hat keinen Rückgabewert und heißt so wie die Klasse...
diese Methode wird nie aufgerufen...


Run run = new Run(test);
run.Zeichenkette();

wobei man Methoden klein schreiben soll


och. da hab ich wieder alles verschlafen..
 
Ich dämlicher Trottel xD

Java:
import java.util.Scanner;

public class RunTest
{
	public static void main(String[] args)
	{
		Scanner input = new Scanner(System.in);
		
		System.out.print("Bitte eine Zeichenfolge eingeben: ");
		String aString = input.nextLine();
		
		Run run = new Run(aString);
		String test = run.Zeichenkette();
	}
}

Hatte die Methode Zeichenkette() gesondert getestet ob sie funzt,
ohne darauf zu achten ob ich sie überhaupt in meiner Test-Klasse
aufgerufen habe^^
 
Zuletzt bearbeitet:
Spontan würde ich auf einen StackOverflowError tippen, da du unendlich die Methode innerhalb von sich selber aufrufst (und das Ganze auch 3x)

Java:
zeichenketteLaenge = this.getZeichenkette().length();
Java:
if(this.getZeichenkette().charAt(i) != zeichenAktuell)
Java:
return this.getZeichenkette();
 
Hatte die Methode Zeichenkette() in einer neuen Datei als nicht
objektorientiertes Programm, d. h. nur in der Main-Funktion ablaufen
lassen mit ner String Abfrage.
Da hat alles wunderbar gefunzt^^
Hätte mir das aber sparen können wenn ich nur mal die Augen aufgemacht hätte^^
 
Achso 😛 Trotzdem müsste immer noch ein StackOverflowError kommen...

Du rufst in getZeichenkette wieder getZeichenkette auf und darin wieder getZeichenkette und und und
 
In welchem Programm sollte ich den Fehler bekommen?
Bekomme ihn in der cmd nicht, in Notepad++ nicht und in Eclipse nicht^^

In dieser Klasse die ich schrieb rufe ich in manchen Funktionen auch
öfters eine "this.getZaehler" oder "this.getNenner" Methode auf und
es läuft Fehlerfrei:

Java:
public class Bruch 
{
	private int mZaehler, mNenner;
	private boolean mussKuerzen;

	//*****Konstruktor***********************
	Bruch(int aZaehler, int aNenner) 
	{
		if(aNenner == 0){
			System.out.println("Ungültiger Bruch. Division durch 0.");
		}
		else 
		{
			this.setZaehler(aZaehler);
			this.setNenner(aNenner);
		}
	}
	//*********************************************************************
	public void add(Bruch rhs)
	{
		this.setZaehler(this.getZaehler() * rhs.getNenner() + rhs.getZaehler() * this.getNenner());
		this.berechneHauptNenner(this.getNenner(), rhs);
	}	
	//*********************************************************************
	public void sub(Bruch rhs)
	{
		this.setZaehler(this.getZaehler() * rhs.getNenner() - rhs.getZaehler() * this.getNenner());
		this.berechneHauptNenner(this.getNenner(), rhs);
	}	
	//*********************************************************************
	private void berechneHauptNenner(int aNenner, Bruch rhs)
	{
		this.setNenner(aNenner * rhs.getNenner());
	}	
	//*********************************************************************
	public void mult(Bruch rhs)
	{
		this.setZaehler(this.getZaehler() * rhs.getZaehler());
		this.setNenner(this.getNenner() * rhs.getNenner());
	}	
	//*********************************************************************
	public void div(Bruch rhs)
	{
		if(rhs.getZaehler() == 0)
		{
			System.out.println("Ungültiger Bruch. Division durch 0.");
		}
		else 
		{
			this.setZaehler(this.getZaehler() * rhs.getNenner());
			this.setNenner(this.getNenner() * rhs.getZaehler());
		}
	}	
	//*********************************************************************
	private void kuerzen()
	{
		if(isMussKuerzen())
		{
			for(int i = 2; i <= Math.sqrt(Math.abs(this.getZaehler()))+1; i++)
			{
				if(this.getZaehler()%i == 0 && this.getNenner()%i == 0)
				{
					this.setZaehler(this.getZaehler()/i);
					this.setNenner(this.getNenner()/i);
					i--;
				}
			}
			this.setMussKuerzen(false);
		}
	}		
	//*********************************************************************
	public String toString()
	{
		this.kuerzen();
		return this.getZaehler() + "/" + this.getNenner();
	}	
	//*********************************************************************
	private int getZaehler() 
	{
		return mZaehler;
	}
	//*********************************************************************
	private int getNenner() 
	{
		return mNenner;
	}	
	//*********************************************************************
	private void setZaehler(int aZaehler) 
	{
		this.setMussKuerzen(true);
		this.mZaehler = aZaehler;
	}	
	//*********************************************************************
	private void setNenner(int aNenner) 
	{
		this.setMussKuerzen(true);
		this.mNenner = aNenner;
	}	
	//*********************************************************************
	private boolean isMussKuerzen() 
	{
		return mussKuerzen;
	}
	//*********************************************************************
	private void setMussKuerzen(boolean aBoolean) 
	{
		this.mussKuerzen = aBoolean;
	}
}
 
Zuletzt bearbeitet:

Zurück
Oben