Member 14920078 Ответов: 2

Почему у person[] personarray есть проблема?


error: cannot find symbol


Что я уже пробовал:

import java.util.Scanner;
import java.util.Date;

public class Assignment
{
	static Scanner key  = new Scanner(System.in);
    private Person[] personArr = person();
    private static int indexNum = 0;
    
    public static void person()
	{
	    Person[] personArr = new Person[10000];
		personArr[0] = new Staff("xxx",'F',"01110807822","xxx123","xxx");
		personArr[1] = new Staff("xxx",'F',"0123456789","xxx123","xxx");
		
		return personArr;
    }
	public static void staffDisplay(String[] personArr)
    {
    	for(int i = 0; i < personArr.length; i++)
        {
        	if(personArr[i] != null)
           	{
           		if(personArr[i] instanceof Staff)
           		{
           			System.out.println(personArr[i]);
           		}
           	}
        }
     }

Patrice T

Дайте точное сообщение об ошибке с указанием позиции (номера строки)

2 Ответов

Рейтинг:
0

Patrice T

Пустая функция никогда ничего не возвращает, никогда.

public static void person()
{
    Person[] personArr = new Person[10000];
    personArr[0] = new Staff("xxx",'F',"01110807822","xxx123","xxx");
    personArr[1] = new Staff("xxx",'F',"0123456789","xxx123","xxx");

    return personArr;
}


Рейтинг:
0

OriginalGriff

Как говорит Патрис, а void функция никогда не может вернуть никакого значения.
Так что измените его, чтобы дать ему правильный тип возврата, и он будет работать:

public static Person[] person()
{
    Person[] personArr = new Person[10000];
    personArr[0] = new Staff("xxx",'F',"01110807822","xxx123","xxx");
    personArr[1] = new Staff("xxx",'F',"0123456789","xxx123","xxx");

    return personArr;
}
Но я бы настоятельно рекомендовал не называть его "person" - он не отражает того, что делает функция, и его слишком легко спутать с "Person" класса.
Попробуй
public static Person[] createPeople()
Или
public static Person[] loadPeople()
вместо. Я бы, наверное, тоже сделал это частью класса Person и загружал людей из файла, а не жестко кодировал их. Таким образом, когда ваш код начинает добавлять экземпляры Person на основе пользовательского ввода, вы можете добавить их в файл и сохранить для следующего запуска, не изменяя свой код. Передача пути к файлу в метод также сделает его более гибким.


Patrice T

Вы уверены, что возврат локального массива-это хорошая идея ?

OriginalGriff

"new" выделяет его в куче, а не в локальном стеке - только ссылочная переменная personArr является локальной, ее содержимое-нет.

Patrice T

Ладно, моя беда, я не являюсь пользователем Java :)

OriginalGriff

C developer случайно нет? :смеяться:

Это одна из причин, по которой были созданы C# и Java - чтобы избавиться от висячих ссылок и забавных ошибок, которые они генерируют. Мне самому пришлось искать довольно много из них ...

Patrice T

Да :)
Старая привычка