2010-03-14 25 views
9

Khi tôi cố gắng biên dịch này:" 'khoảng trống' Không cho phép loại here" lỗi (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)) ; 
     } 
    } 

tôi nhận được lỗi này:

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

Tôi thực sự không biết làm thế nào để bắt đầu hỏi về điều này ngoài việc hỏi:

  • Điều gì đã xảy ra ở đây?
  • Thông báo lỗi này có ý nghĩa gì?

Trả lời

11

Nếu phương thức trả về void thì không có gì để in, do đó thông báo lỗi này. Kể từ printPoint đã in dữ liệu ra cửa sổ Console, bạn chỉ nên gọi nó là trực tiếp:

printPoint (blank); 
10

Bạn đang cố gắng in kết quả của printPoint không trả lại bất kỳ thứ gì. Bạn sẽ cần phải thay đổi mã của bạn để làm một trong hai điều này:

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) ; 
    } 
} 

hay này:

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

Bạn đang đi qua là kết quả của printPoint() - đó là khoảng trống - cho println() chức năng.

4

Vấn đề loại là println mất một String để in, nhưng thay vì một chuỗi, bạn đang gọi phương thức printPoint đó là trả lại void.

Bạn chỉ có thể gọi printPoint(blank); trong chức năng chính của bạn và để nó ở đó.

1

printPoint in tự thay vì trả về một chuỗi. Để sửa cuộc gọi đó printPoint (trống) mà không cần System.out.println.

Một lựa chọn tốt hơn có thể là: làm cho printPoint(Point p) trả về một chuỗi (và đổi tên thành một cái gì đó như FormatPoint), theo cách đó, phương pháp này có thể được sử dụng để định dạng điểm cho giao diện điều khiển, GUI, in, v.v. vào bảng điều khiển.

0

Bạn có thể muốn thực hiện: printPoint (blank);. Có vẻ như bạn đang cố in hai lần; một lần bên trong printPoint() và một lần bên trong main().

Các vấn đề liên quan