#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
является закрытым и окончательным. Это означает, что она не может быть изменена после создания объекта, что облегчает размышление о том, как ведет себя ваш объект, и его нельзя увидеть за пределами вашего класса, что означает, что вы можете изменить свой класс, не затрагивая другие классы, которые его используют.