Printf führt zu Error.

Bigliner

Mitglied
Habe folgendes Problem das der Befehl System.out.printf zu Fehlern führt die ich nicht erklären kann.
Ist das irgendein Formatierungsproblem?
Bei mir klappt auch system.out.format nicht richtig, wo ich mir sicher bin das es bei anderen klappt.

Java:
public class Bruch{
	public int z;
	public int n;

	public Bruch( int zaehler, int nenner ){
		z = zaehler;
		n = nenner;
		if ( n == 0 ){
			Terminal.println( "0 im Nenner ist ungültig!! Es wird jetzt stattdessen 1 verwendet." );
			n = 1;
		}
	}

	public void printBruch(){
		ensureNegDisplay();
		System.out.printf( " %d/%d ", z, n );
	}

	public void multipliziereMit( Bruch b ){
		z *= b.z;
		n *= b.n;
		for ( int ggt = n; ggt > 1; ggt-- ) // ggt war in der HA nicht gefordert.
			if ( (z % ggt == 0) && (n % ggt == 0) ){
				z /= ggt;
				n /= ggt;
				break;
			}
	}

	public void ensureNegDisplay(){
		if ( n < 0 ){
			n *= -1;
			z *= -1;
		}
	}
 }


Hier ist der Fehler:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method printf(String, Object[]) in the type PrintStream is not applicable for the arguments (String, int, int)

at Bruch.printBruch(Bruch.java:16)
at BruchTest.main(BruchTest.java:11)
 
Zuletzt bearbeitet:
wenn man mal von
Java:
Terminal.println( "0 im Nenner ist ungültig!! Es wird jetzt stattdessen 1 verwendet." );
absieht, funktioniert es bei mir tadellos:

Java:
    public static void main(String[] args) {
        Bruch bruch = new Bruch(1, 2);
        bruch.multipliziereMit(new Bruch(2,4));
        bruch.printBruch();
    }

Ausgabe:

Code:
run:
 1/4

Es wäre also interessant, noch deinen Aufruf zu erfahren ...
 
Das meinte ich ja... Eigentlich ist das Code richtig und sollte funktionieren aber bei mir spuckt Eclipse eine Exception aus. Auch bei system.out.format spuckt er Fehler aus im Sinne von
system.out.format is not applicable for the arguments (String, int, int)
 
Hallo,

welche Version von Java benutzt du?
"printf" gibt es "erst" seit der Version 1.5.
Da du etwas wie "Terminal" benutzt, vermute ich, dass ihr ein System verwendet, das eurer Lehrer/Prof geschrieben hat und das die Ein- und Ausgabe besonders einfach machen soll. Das kann natürlich auch zu Problemen führen ...

Gruß
Fritz
 
Also ich benutze die Java Version 8 update 5 und eclipse hat die Version Eclipse Standard/SDK 2.0.2.20140224-0000 epp.package.standard null

Wie kann man den Fehler beheben?

Heute wieder versuch system.out.format zu benutzen und den Fehler in Eclipse bekommen: Note: This element neither has attached source nor attached Javadoc and hence no Javadoc could be found.

hier die exception: Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method format(String, Object[]) in the type PrintStream is not applicable for the arguments (String, String, int, int)

at Übung10.Konto.toString(Konto.java:43)
at Übung10.TestKonto.main(TestKonto.java:18)


Es scheint wohl nicht nur ein fehler in Printf zu sein sondern der Klasse Java.lang oder in Eclipse?
 
Zuletzt bearbeitet:
Ich habe nun wie in der Anleitung meinen Compilance Level auf 1.6 gesetzt aber er zeigt mir anstatt dessen den Fehler hier an in der Klasse Konto:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from PrintStream to String

at Übung10.Konto.toString(Konto.java:45)
at Übung10.TestKonto.main(TestKonto.java:18)


Hier der entsprechende Code. in Testkonto wird er nur aufgerufen.


[Java]

public String toString(){

return System.out.format("Der Inhaber des Konto ist: %s/n Die Kontonummer ist: %s/n Der Kontostand ist: %s/n" , name,kontonummer,kontostand);


[/code]

Ich habe erstmal system.out.format nicht benutzt sondern das hier um weiterzukommen:

Java:
public String toString(){
		
		return 	 "Der Inhaber des Konto ist: " + name + "| Die Kontonummer ist : " + kontonummer + " | Die Kontostand ist : " + kontostand;  
			
	}
 
Zuletzt bearbeitet:
Das kommt halt daher, dass dir System.out.format() nur den PrintStream zurück gibt. Wenn es nur um Strings geht kannst du auch sowas machen:

Java:
String text = MessageFormat.format("Ein {0} und {1} einer.", "Test", "noch");
 

Zurück
Oben