Как мне правильно ссылаться на переменную из другого метода в Java?

#java #methods

#java #методы

Вопрос:

Я не знаю, как я должен ссылаться на переменные в .Метод toString() . Я работал над тем, как это сделать. Она общедоступна, поэтому я не понимаю, почему она не используется совместно. импортируйте java.util.Сканер;

 class Donation {

public static void main(String[] args) {

    Donation uw1 = new Donation("University of Washington", 600.75, true);

    Donation uw2 = new Donation("University of Washington", 40, true);

    Donation sj = new Donation("Snap Judgment", 30, false);

    Donation tal = new Donation("This American Life", 40, true);

    Donation mc = new Donation("Microphone Check", 99.99, false);

    System.out.println(uw1.toString());
    System.out.println(uw2.toString());
    System.out.println(sj.toString());
    System.out.println(tal.toString());
    System.out.println(mc.toString());
}

public Donation(String organization, double amount, boolean tax) {
    double v= amount;
    String org = organization;
    boolean b= tax;

}

public String toString(){
    if (!v){
        return "$" v ": " org;
    }
    else if (b) {
        return "* $"   v   ": "   org;
    }
    else{
        return "error";
    }
}
  

Комментарии:

1. Без полей в вашем классе toString() метод практически бесполезен. Прежде чем даже думать о toString, дайте вашим объектам некоторое «состояние», дайте им поля экземпляра.

2. Ваш конструктор устанавливает локальные переменные, которые вам не помогут. Опять же, объявите те переменные, которые находятся внутри конструктора снаружи , как поля класса. Тогда да, задайте их в конструкторе, но не объявляйте их там.

3. Кроме того, лучше использовать значимые имена переменных. Я бы назвал их: сумма, организация и налогооблагаемая.

Ответ №1:

Вы устанавливаете локальные переменные в своем конструкторе:

 public Donation(String organization, double amount, boolean tax) {
    double v= amount;
    String org = organization;
    boolean b= tax;
}
  

и это вам хорошо известно, поскольку эти переменные существуют только внутри конструктора, и как только конструктор заканчивается, переменные исчезают вместе с ним, и в этом суть вашей проблемы. Вместо этого объявите эти переменные вне конструктора и в классе.

 public class Donation {

    private double v;
    private String org;
    private boolean b;
  

Тогда да, задайте поля в конструкторе, но не объявляйте их повторно.

 public Donation(String organization, double amount, boolean tax) {
    v= amount;
    org = organization;
    b= tax;
}
  

Затем вы можете использовать значения, хранящиеся в этих полях, в вашем методе toString.

Ответ №2:

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

Ответ №3:

Переменные, объявленные в функциях, являются «локальными переменными». Их время жизни — это выполнение метода.

Итак v , org и b существует только в вашем Donation конструкторе. К моменту вызова toString они больше не существуют

Чтобы иметь переменные, время жизни которых совпадает с временем жизни вашего объекта, вам нужно создать поле для вашего объекта.

 class Donation {
  private final double v;
  
  public Donation(double value) {
     v = value;
  }

  public toString() {
     return "$"   v;
  }
}
  

v является закрытым и окончательным. Это означает, что она не может быть изменена после создания объекта, что облегчает размышление о том, как ведет себя ваш объект, и его нельзя увидеть за пределами вашего класса, что означает, что вы можете изменить свой класс, не затрагивая другие классы, которые его используют.