Ошибка «недопустимый тип» здесь (Java) - PullRequest
12 голосов
/ 14 марта 2010

Когда я пытаюсь скомпилировать это:

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

Я получаю эту ошибку:

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

Я действительно не знаю, как начать спрашивать об этом, кроме как спросить:

  • Что здесь пошло не так?
  • Что означает это сообщение об ошибке?

Ответы [ 6 ]

13 голосов
/ 14 марта 2010

Если метод возвращает void, то печатать нечего, отсюда и это сообщение об ошибке. Поскольку printPoint уже печатает данные на консоль, вам нужно просто вызвать их напрямую:

printPoint (blank); 
13 голосов
/ 14 марта 2010

Вы пытаетесь распечатать результат printPoint, который ничего не возвращает. Вам нужно будет изменить код, чтобы выполнить одно из следующих двух действий:

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

или это:

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)) ;
    }
}
4 голосов
/ 14 марта 2010

Проблема типа в том, что println принимает для печати строку, но вместо строки вы вызываете метод printPoint, который возвращает void.

Вы можете просто вызвать printPoint(blank); в своей основной функции и оставить все как есть.

1 голос
/ 14 марта 2010

printPoint печатает сам, а не возвращает строку. Чтобы исправить этот вызов printPoint (пусто) без System.out.println.

Лучшей альтернативой может быть: make printPoint(Point p) вернуть строку (и изменить ее имя на что-то вроде FormatPoint), таким образом, этот метод может использоваться для форматирования точки для консоли, графического интерфейса пользователя, печати и т. Д. чем быть привязанным к консоли.

1 голос
/ 14 марта 2010

Вы передаете результат printPoint() - который является недействительным - в функцию println().

0 голосов
/ 14 марта 2010

Вы, вероятно, хотели сделать: printPoint (blank);. Похоже, вы пытаетесь напечатать дважды; один раз внутри printPoint() и один раз внутри main().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...