2017-02-18 3 views
0

Ich habe versucht, eine Zeichenfolge und Int in derselben Zeile zu drucken. Aber ich bekomme einen Fehler. Ich kenne mich mit diesem Fehler aus, aber warum gibt die Zeile System.out.println("This is a string: %i", c2.a); Fehler, während die Zeile System.out.println("This is class method" + c2.a); die richtige Ausgabe gibt. Unten ist mein Code.Java-Druckzeichenfolge und Int in derselben Zeile

public class MyClass 
{ 
    private int a; 
    public double b; 

    public MyClass(int first, double second) 
    { 
    this.a = first; 
    this.b = second; 
    } 

    // new method 
    public static void incrementBoth(MyClass c1) { 
    c1.a = c1.a + 1; 
    c1.b = c1.b + 1.0; 
    } 

    //pass by valuye therefore no change 
    public static void incrementA(int a) 
    { 
    a = a+1; 
    } 

    public static void main(String[] args) 
    { 
    MyClass c1 = new MyClass(10, 20.5); 
    MyClass c2 = new MyClass(10, 31.5); 
    // different code below 
    incrementBoth(c2); 
    incrementA(c1.a); 
    System.out.println("This is a object passing: %i",c2.a); 
    System.out.println("This is object passing: " + c2.a); 
    System.out.println("This is pass by value: %d",c1.a); 
    } 
} 

Meine andere Frage ist, funktioniert die Linie incrementBoth(c2) ändert Wert von c2, weil hier ganze Objekt an die Methode übergeben wird, anstatt vorbei Wert in incrementA(c1.a)

+0

Willkommen bei Stack Overflow! Bitte nehmen Sie die [Tour] (http://stackoverflow.com/tour), schauen Sie sich um und lesen Sie die [Hilfe] (http://stackoverflow.com/help), insbesondere [Wie frage ich eine gute Frage?] (http://stackoverflow.com/help/how-to-ask) und [Was kann ich hier fragen?] (http://stackoverflow.com/help/on-topic). - bitte nur eine Frage auf einmal stellen. –

+0

Da println() akzeptiert ein einzelnes Argument, nicht zwei. https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html#println-java.lang.String-. Die Fehlermeldung sagt Ihnen genau das. Du solltest es lesen. printf() benötigt mehrere Argumente: https://docs.oracle.com/javase/8/docs/api/java/io/PrintStream.html#printf-java.lang.String-java.lang.Object...- . Kurz gesagt, lesen Sie Fehlermeldungen und lesen Sie das Javadoc. –

+1

In Bezug auf Ihre zweite Frage wäre http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value?rq=1 eine gute lesen. – fvu

Antwort

4

Sie benötigen die printf Methode verwenden und nicht println.

println wird verwendet, um primitive Typen, Strings und Objekte so zu drucken, wie sie sind. Außerdem verwendet println nur ein Argument als Eingabe. Aus diesem Grund erhalten Sie einen Fehler, wenn Sie mehrere Argumente in Ihrem Code übergeben.

printf auf der anderen Seite wird verwendet, um zu formatieren und dann die formatierte Zeichenfolge auf die Standard-Ausgabe/Fehler zu drucken. Dies sollten Sie in Ihrem obigen Code zum Formatieren der Ausgabe verwenden.

Hier ist ein reference to the tutorials.


Hoffe, das hilft!

+0

Das gibt mir eine 'Ausnahme im Thread 'main" java.util.UnknownFormatConversionException: Conversion =' i''. und keine Ausgabe ist gegeben. Warum ist das so? –

+0

https://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntax – fvu

+0

Sie müssen '% d' nicht'% i' verwenden. So: 'System.out.println (" Dies ist ein Objekt, das übergeben wird:% d ", c2.a);' – anacron

Verwandte Themen