#java
Вопрос:
Вот мой код, я пытаюсь получить доступ к e1,e2,e3 в своем методе getData (), но он не работает. Как мне заставить мой второй метод распознавать первые, но при этом разделять методы?
public class Model {
public Model() {
loadData();
}
public void loadData() {
Employee e1 = new Employee("John Smith", "California, PA.", "Dr. Robertson junior.");
Employee e2 = new Employee("Kyle Alston", "State College, PA.", "SmithTown");
Employee e3 = new Employee("Tommy Smith", "Baskeville, PA.", "Chicago");
}
public String getData(int n) {
if(n == 1){
return e1;
}
if(n == 2){
return e2;
}
if(n == 3){
return e3;
}
}
}
Я попробовал Model data = new loadData().e1, но я не думаю, что это работает.
Заранее спасибо. Мне не разрешается изменять параметры.
Комментарии:
1. Вам нужно понять «область применения». Переменные e1, e2, e3 просто не существуют , когда loadData не выполняется. Вы должны объявить их как переменные экземпляра (члена). Сказав это, код был бы более лаконичным, используя массив.
2. @user16632363 значит, к ним нет доступа?
3. Вы не можете получить доступ к чему-то, чего не существует , Переменные появляются при вводе loadData и перестают существовать непосредственно перед возвращением из loadData.
4. @user16632363 означает ли это, что мой метод loadData() бесполезен?
5. Ваш
loadData()
метод создает сотрудников, которые все теряются, когда метод завершает выполнение.
Ответ №1:
Используйте переменные-члены для сохранения значений от одного метода к другому.
public class Model {
private Employee e1, e2, e3;
public Model() {
loadData();
}
public void loadData() {
e1 = new Employee("John Smith", "California, PA.", "Dr. Robertson junior.");
e2 = new Employee("Kyle Alston", "State College, PA.", "SmithTown");
e3 = new Employee("Tommy Smith", "Baskeville, PA.", "Chicago");
}
public String getData(int n) {
if (n == 1) {
return e1;
}
if (n == 2) {
return e2;
}
if (n == 3) {
return e3;
}
return null;
}
}
Для сравнения, переписано с использованием простого массива. Преимущество здесь в том, что getData теперь не зависит от количества сотрудников.
public class Model {
private Employee[] e;
public Model() {
loadData();
}
public void loadData() {
e = new Employee[3];
e[0] = new Employee("John Smith", "California, PA.", "Dr. Robertson junior.");
e[1] = new Employee("Kyle Alston", "State College, PA.", "SmithTown");
e[2] = new Employee("Tommy Smith", "Baskeville, PA.", "Chicago");
}
public String getData(int n) {
if (n <= 0 || n > e.length) {
return null;
}
return e[n-1];
}
}
Я мог бы рассмотреть возможность использования списка массивов, а не массива, но массив является более фундаментальным в Java, что, я думаю, делает его лучшим выбором для начального обучения.