Метод Eclipse не определен, хотя я определил его, очистил свой проект, проверил путь сборки и пробил мой компьютер - PullRequest
0 голосов
/ 01 января 2019

Я пишу некоторый код для школы (тестовый класс и основной класс), и когда я создаю тестовый класс, методы, которые я вызываю из основного класса, являются «неопределенными для типа CylinderTest».Когда я все равно пытаюсь запустить программу, Eclipse не может даже найти основной класс.

Я просмотрел очень много вопросов о переполнении стека для ответа.У меня была похожая проблема здесь , но это не решает мою текущую проблему.Я также попытался (самостоятельно) импортировать java.util.Scanner в проблемный класс, но это не сработало, либо

Файл # 1

package CirclePackage;
import java.util.Scanner;

public class Cylinder {

    public static double askForRadius() {
        System.out.println("What would you like the radius of the cylinder to be?");
        Scanner in = new Scanner(System.in);
        double r = in.nextDouble();
        in.close();
    return r;
    }

public static double askForheight() {
    System.out.println("What would you like the height of the cylinder to be?");
    Scanner in = new Scanner(System.in);
    double h = in.nextDouble();
    in.close();
    return h;
    }

public static double getVolume(double radius, double height) {
    double area = Math.PI*radius*radius*height;
    return area;
    }

}

Файл # 2:

package CirclePackage;


public class CylinderTest {

static void main(String[] args) {

    double r = askForRadius(); //<--------------Errors appear HERE,
    double h = askForheight(); //<----------------------------HERE,
    double result = getVolume(r, h); //<------------------and HERE.
    System.out.println("The Volume of the cylinder is: " + result);

    }

}

Предполагается, что эта программа рассчитывает объем цилиндра на основе пользовательских данных для радиуса и высоты цилиндра.Это не так.

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Ваша основная проблема заключается в том, что вы пытаетесь вызвать методы askForRadius, askForheight и getVolume без использования ссылок в классе, где они не определены.Следовательно, компилятор будет искать эти методы в классе CylinderTest и, не найдя их, выдает и ошибку.Вам нужно указать, где расположены эти методы, прежде чем компилятор сможет скомпилировать ваш код.

Сделать это на самом деле довольно просто.Все, что нужно сделать, это импортировать класс, который содержит эти методы, и ссылаться на него при вызове вашего метода.Чтобы сослаться на класс, вы должны указать его путь и имя или, если он импортирован, просто указать его имя.

double r = Cylinder.askForRadius();
double h = Cylinder.askForheight();
double result = Cylinder.getVolume(r, h);

Я предлагаю вам сделать дополнительное чтение по Классы и объекты и взгляните на этот вопрос: Что такое классы, ссылки и объекты?

Другая проблема main здесь ваша main метод.Если вы посмотрите на Oracle Tutorial , вы увидите, что в нем написано:

В языке программирования Java каждое приложение должно содержать основной метод с сигнатурой:

public static void main(String[] args)

Модификаторы public и static могут быть записаны в любом порядке (public static или static public), но условием является использование public static, как показано выше.Вы можете назвать аргумент как угодно, но большинство программистов выбирают «args» или «argv».

Теперь, если вы посмотрите на свой код, вы увидите, что ваш метод main имеет *Модификатор 1033 *, но не модификатор public.Лучше сделайте это публичным, иначе ваша программа никогда не запустится;)


Хорошо, это решает две основные проблемы, но у вас все еще есть еще две маленькие.

Прежде всего,вы закрываете System.in в своем методе askForRadius, поэтому вы не сможете прочитать его при вызове метода askForheight.

Во-вторых, вы создаете новый экземпляр сканера каждый раз, когда выхочу читать с System.in.В конечном счете, это не угроза, но это неэффективный и очень «грязный» код.

Решение этих двух следующих проблем уже определено в ответе на другом вопросе :

Вы должны создать только один сканер, который вы используете для жизни программы

, и не следует закрывать этот сканер.

0 голосов
/ 01 января 2019

Вот исправление:

public class CylinderTest {

    public static void main(String[] args) {

        double r = Cylinder.askForRadius(); //<--------------Errors appear HERE,
        double h = Cylinder.askForheight(); //<----------------------------HERE,
        double result = Cylinder.getVolume(r, h); //<------------------and HERE.
        System.out.println("The Volume of the cylinder is: " + result);

    }

}

Второй класс:

import java.util.Scanner;

public class Cylinder {

    public static double askForRadius() {
        System.out.println("What would you like the radius of the cylinder to be?");
        Scanner in = new Scanner(System.in);
        double r = in.nextDouble();
        return r;
    }

    public static double askForheight() {
        System.out.println("What would you like the height of the cylinder to be?");
        Scanner in = new Scanner(System.in);
        double h = in.nextDouble();
        return h;
    }

    public static double getVolume(double radius, double height) {
        double area = Math.PI*radius*radius*height;
        return area;
    }

}
...