сеттеры и геттеры в Java - PullRequest
       57

сеттеры и геттеры в Java

0 голосов
/ 30 сентября 2018

У меня есть два файла, один - драйвер, у меня проблема с сеттерами.Похоже, он установил значение.

public class Movie {
private String name;
private int minutes;
protected int tomatoScore;

public Movie(String name, int minutes, int tomatoScore)
{
    this.name=name;
    this.minutes=minutes;
    this.tomatoScore=tomatoScore;
}

public String getName() {return name;}
public void setName(String name) {this.name=name;}
public int getMinutes() {return minutes;}
public boolean setMinutes(int minutes) {return minutes>=0;}
public int getTomatoScore() {return tomatoScore;};
public boolean setTomatoScore(int tomatoScore) {return tomatoScore>=0 &&tomatoScore<=100;};
public boolean isFresh() {return tomatoScore>=60;};

public void display()
{
    //this.name = name;
    //this.minutes = minutes;
    //this.tomatoScore =tomatoScore;

    System.out.println("Movie: "+ getName());
    System.out.println("Length: "+ getMinutes() +"min.");

    if(tomatoScore>=60)
    {
        System.out.println("TomatoScore: Fresh");
    }
    else 
    {
        System.out.println("TomatoScore: Rotten");
    }


}

}

, и ниже приведен файл драйвера, если вы заметили, что сеттеры выполнили работу, которая должна была выполнить, я полагаю, что проблема заключается в классе фильма, если вы запускаете драйвер для тестирования программы, вы видите, что если вы установите отрицательное значение, оператор if не будет работать должным образом (setMinutes и setTomatoScore ошибочны. Они вообще не устанавливают поля класса)

открытый класс MovieDriver {

public static void main (String [] args){

    Movie[] myCollection = new Movie[5];
    myCollection[0] = new Movie("Batman The Dark Knight", 152, 94);
    myCollection[1] = new Movie("Guardians of the Galaxy", 125, 91);
    myCollection[2] = new Movie("The GodFather", 178, 98);
    myCollection[3] = new Movie("Suicide Squad", 137, 27);
    myCollection[4] = new Movie("Get out", 104, 99);


    //TODO
    //Initialize the variable below and add it to myCollection at index 4.
    //You can pick any movie you wish.
    Movie yourMovie;


    System.out.println("Here are all the movies in my collection of movies.\n");
    for(int i = 0; i < myCollection.length; i++) {
        if(myCollection[i] != null)
            myCollection[i].display();
    }

    System.out.println("_______________________________________________");


    System.out.println("\nHere are the Fresh movies.");

    for(int i = 0; i < myCollection.length; i++) {
        if(myCollection[i] != null && myCollection[i].isFresh()) {
            System.out.println(myCollection[i].getName() + " is fresh.");
        }
    }

    System.out.println();
    System.out.println("Here are the Rotten movies.");

    for(Movie movieTmp: myCollection){
        if (movieTmp != null && !movieTmp.isFresh())
            System.out.println(movieTmp.getName() + " is rotten.");
    }

    System.out.println("_______________________________________________\n");

    Movie harryPotter = new Movie("Harry Potter and the Prisoner of Azkaban", 144, 91);
    System.out.println("The movie " + harryPotter.getName() + " was created.\n");

    System.out.println("Is " + harryPotter.getName() + " a long movie?");

    if(harryPotter.getMinutes() > 120) {
        System.out.println("Yes, it is a bit long.\n");
    } else {
        System.out.println("Nope, that isn't too bad.\n");
    }

    System.out.println("Can I set the minutes of " + harryPotter.getName() + " to a negative number?");
    harryPotter.setMinutes(-5);

    if(harryPotter.getMinutes() == -5) {
        System.out.println("It worked. The runtime is -5 minutes.\n");
    } else {
        System.out.println("It did NOT work.  Negative runtimes are not allowed.\n");
    }

    System.out.println("Can I set tomato score of " + harryPotter.getName() + " to a negative number?");
    harryPotter.setTomatoScore(-100);

    if(harryPotter.getTomatoScore() == -100) {
        System.out.println("It worked. The score is -100.  This movie is terrible according to the site.\n");
    } else {
        System.out.println("It did NOT work.  Negative scores are not allowed.\n");
    }

    System.out.println("Can I set tomato score of " + harryPotter.getName() + " to a number greater than 100?");
    harryPotter.setTomatoScore(101);

    if(harryPotter.getTomatoScore() == 101) {
        System.out.println("It worked. The score is 101.  Best Harry Potter movie ever!\n");
    } else {
        System.out.println("It did NOT work.  Still the best Harry Potter movie out all the movies though.\n");
    }


}

}

Ответы [ 4 ]

0 голосов
/ 30 сентября 2018

Вам нужно установить что-то tomatoScore в состоянии методов, как показано ниже:

public boolean setTomatoScore(int tomatoScore) {
  if (tomatoScore >= 0 && tomatoScore <= 100) {
    this.tomatoScore = tomatoScore;
    return true;
  }
  return false;
}
0 голосов
/ 30 сентября 2018

Как уже упоминалось в rzwitserloot, функция setter для минут и tomatoScore ничего не устанавливает. Это может иметь место.

Дополнительно я хотел бы добавить, я обнаружил, что для программирования на Java лучше использовать хорошо известную IDEкак intellij, netBean, затмение.Они предоставляют множество функций, таких как автоматическое создание сеттера, геттера, конструктора.Таким образом, мы можем больше сосредоточиться на основной логике, и это экономит наше время и снижает вероятность ошибок вручную.Еще один момент, который я хотел бы добавить: лучше использовать setter в конструкторе, поэтому перед установкой значения мы хотим выполнить любую проверку входных данных, мы можем иметь это в setter и использовать его даже при установке значения через конструктор.

Например,

public class Example {
private int x;
public Movie(int x){setMinutes(x);}
public void setX(int x) {
//some validation on input
  if(x >= 0){this.x = x;}
public int getX() {return x;}
0 голосов
/ 30 сентября 2018

Похоже, вам нужно это:

       public boolean setMinutes(int minutes) {
          if(minutes >= 0 && minutes < 60) { 
    //I'm guessing the <60 part here, but whatever, 
    //this is how you'd set the 100 limit on your setTomatoScore method
            this.minutes = minutes;
            return true;
          }
          return false;
        }

Внести аналогичные исправления для setTomatoScore

0 голосов
/ 30 сентября 2018

Ваши setMinutes и setTomatoScore методы ничего не устанавливают, они просто возвращают логическое значение.Я полагаю, вы забыли добавить this.tomatoScore = tomatoScore например.

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