JAVA questissn относительно методов / классов - PullRequest
0 голосов
/ 12 февраля 2012

Я немного новичок в JAVA.Я работал с этим в колледже, но я должен признать, что мой инструктор абсолютно не помогает.Она сама почти не знает JAVA, но это уже другая проблема.Я был сбит с толку относительно того, как работают методы и классы.Я создаю эту программу, которая использует два файла, один «основной» файл и «тестовый» файл.Кажется, я не могу правильно понять «основной» файл, так как компилятор постоянно говорит мне, что он не может найти символы, даже если они есть.В «тестовом» файле я не могу заставить компилятор распознавать методы из «основного» файла.Я убедился, что файлы находятся в одной папке.Я хочу объединить их в один файл для простоты, но я потеряю очки.Я включил свой код до сих пор.Я не ищу решение "исправить это", я просто хочу выяснить, почему оно не работает.ЛЮБАЯ помощь приветствуется, так как мой инструктор не очень помогает. Спасибо!


ГЛАВНЫЙ ФАЙЛ:

import java.util.Scanner;

class Fruit1 {
    static Scanner console = new Scanner(System.in);

    public static void main(String args[]) {

        String color;
        String taste;
    }

    public Fruit1() {
        // generic constructor

        color = "red";
        taste = "yum";

    }

    public Fruit1(String aColor, String aTaste) {
        // constructor with parameters
        color = aColor;
        taste = aTaste;
    }

    public Fruit1(String bColor, String bTaste) {

        color = bColor;
        taste = bTaste;
    }

    String getTaste() {
        return taste;
    }

    String getColor() {
        // Accessor method
        return color;
    }
}

ФАЙЛ ТЕСТА:

import java.util.*;

public class Fruit1Test {

    static Scanner console = new Scanner(System.in);

    public static void main(String args[]){

        Fruit1 a = new Fruit1("pinkish-red", "sweet-tart");
        Fruit1 l = new Fruit1("yellow", "tart/sour");

        a.taste();
        a.color();
        l.taste();
        l.color();

        System.out.println("Your apple is " + a.color + "in color and has a " + a.taste + " taste. ");
        System.out.println("Your lemon is " + l.color + "in color and has a " + l.taste + " taste. ");
        System.out.println();
    }
}

Ответы [ 4 ]

1 голос
/ 12 февраля 2012

a.taste(); попытается найти метод taste(); в вашем основном файле, т.е. в файле Fruit1.java.Однако, поскольку этот же файл не найден, он выдаст ошибку во время компиляции только в том случае, если метод taste() не найден ...

Все приведенные ниже 4 оператора будут FAIL , поскольку таковые отсутствуют...

a.taste();
a.color();
l.taste();
l.color();

Поскольку вы создаете объект класса, используя оператор ниже, уже значения для вкуса и цвета используются конструктором public Fruit1(String aColor, String aTaste){.

Fruit1 a = new Fruit1("pinkish-red", "sweet-tart");

Полагаю, теперь вы хотите напечатать значения цвета и вкуса.Чтобы напечатать эти методы, используйте имеющиеся у вас методы получения (getColor () & getTaste ())

System.out.println("Your apple is " + a.getColor() + " in color and has a " + a.getTaste() + " taste. ");

System.out.println("Your Lemon is " + l.getColor() + " in color and has a " + l.getTaste() + " taste. ");

Примечание

Вам не нужно снова писать public Fruit1(String bColor, String bTaste){, как вы уже определиливыше этого ....

Также ваше нижеприведенное утверждение должно быть перед конструктором и вне psvm

String color;
String taste;

Дайте мне знать, если вы неясны ...

ХорошоLuck

1 голос
/ 12 февраля 2012

Вы никогда не объявляете поля color или taste для объекта Fruit1. Вместо этого вы создали переменные в методе main.

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

1 голос
/ 12 февраля 2012

Я заметил, что в Fruit1 вы объявляете переменные-члены в функции main ().Судя по всему, Fruit1Test должен иметь main () fxn, а Fruit1 - нет.Извлеките эти переменные-члены из main () и избавьтесь от main () в Fruit1 (поместите его в переменную 'console').

Я также заметил, что у вас есть 2 конструктора, которые оба принимают в строках.Компилятор, вероятно, тоже будет жаловаться на это.Передо мной нет компилятора, но это то, что я могу сказать, просто посмотрев.

0 голосов
/ 12 февраля 2012

Для вашей первой проблемы, кажется, вы неправильно понимаете, как объявлять поля экземпляра. Вы создаете их внутри функции main, когда вы должны создавать их прямо внутри класса.

Что касается вашей второй проблемы, см. Комментарий Фахима Паркара, если он относится к вашему делу. Кстати, рекомендуется всегда иметь только один класс / интерфейс / перечисление на файл и иметь файл с тем же именем класса (эта вторая часть может быть обязательной в Java, я точно не помню - она ​​применима к public классов, но я не знаю, применимо ли это и к классам "по умолчанию, с защитой пакетов".

Если они названы правильно, ОТО, возможно, ошибка в том, что ваш "основной" файл не скомпилирован, поэтому "тестовый" не нашел его ...

P.S. Я только что заметил, что у вас есть два конструктора с одной и той же сигнатурой (количество параметров и одинаковые типы параметров). Вы должны удалить один.

...