2010-03-14 17 views
9

Quando provo a compilare questo:" 'vuoto' di tipo non consentito qui" errore (Java)

import java.awt.* ; 

    class obj 
    { 
     public static void printPoint (Point p) 
     { 
      System.out.println ("(" + p.x + ", " + p.y + ")"); 
     } 
     public static void main (String[]arg) 
     { 
      Point blank = new Point (3,4) ; 
      System.out.println (printPoint (blank)) ; 
     } 
    } 

ottengo questo errore:

obj.java:12: 'void' type not allowed here 
     System.out.println (printPoint (blank)) ; 
              ^
1 error 

Io in realtà non so come iniziare a chiedere su questo diverso da chiedere:

  • Cosa non ha funzionato qui?
  • Cosa significa questo messaggio di errore?

risposta

11

Se un metodo restituisce void, non c'è niente da stampare, quindi questo messaggio di errore. Dal momento che StampaPunto stampa già i dati alla console, si deve solo chiamare direttamente:

printPoint (blank); 
10

Si sta tentando di stampare il risultato di printPoint che non restituisce nulla. Sarà necessario modificare il codice per fare una di queste due cose:

class obj 
{ 
    public static void printPoint (Point p) 
    { 
     System.out.println ("(" + p.x + ", " + p.y + ")"); 
    } 
    public static void main (String[]arg) 
    { 
     Point blank = new Point (3,4) ; 
     printPoint (blank) ; 
    } 
} 

o questo:

class obj 
{ 
    public static String printPoint (Point p) 
    { 
     return "(" + p.x + ", " + p.y + ")"; 
    } 
    public static void main (String[]arg) 
    { 
     Point blank = new Point (3,4) ; 
     System.out.println (printPoint (blank)) ; 
    } 
} 
1

si sta passando il risultato di printPoint() - che è vuoto - alla funzione println().

4

Il problema è che tipo println prende una stringa da stampare, ma invece di una stringa, si sta chiamando il metodo che è printPoint restituendo void.

Puoi semplicemente chiamare printPoint(blank); nella tua funzione principale e lasciarlo.

1

printPoint stampe di per sé anziché restituire una stringa. Per correggere quella chiamata printPoint (vuota) senza il System.out.println.

Un'alternativa migliore potrebbe essere: fare printPoint(Point p) ritorno una stringa (e cambiare il suo nome a qualcosa come FormatPoint), in questo modo il metodo può essere usato per formattare un punto per la console, GUI, stampa, ecc invece di essere legato alla console.

0

Probabilmente si voleva fare: printPoint (blank);. Sembra che tu stia cercando di stampare due volte; una volta all'interno di printPoint() e una volta all'interno di main().

Problemi correlati