Zadanie i 3 metody

0

Cześć
Jestem na etapie zgłębiania wiedzy odnośnie Javy i mam aktualnie problem z zadaniem :
mam stworzyć klase Osoba: imie, miasto, wiek i stworzyć 3 metody:

  1. metodę ktora zwroci najstarsza osobe z podanej jako argument tablicy osob
  2. metoda ktora zwroci ile osob jest z danego miasta (metoda ma jako arg pobierac tablica osob i nazwe miasta ktora liczymy)
  3. metoda ktora obliczy sredni wiek osob z podanego jako argument miasta (oraz oczywiscie tablicy osob)

Póki co stworzyłęm klasę Person i PersonCollection, ale nie zabardzo wiem co dalej i jak rozgryść.
Mozę być tak że błądzę z kodem i prosiłbym o wskazówki jak to rozgryść.

public class Person {


    private String name;
    private String city;
    private int age;

    public Person(String name, String city, int age) {
        this.name = name;
        this.city = city;
        this.age = age;
    }
}

i klasę PersonCollection

public class PersonCollection {
    public static void main(String[] args) {
        ArrayList<Person> aList = new ArrayList<Person>();
        Person person1 = new Person("Diana", "Dublin", 38);
        Person person2 = new Person("Arthur","New York", 49);
        Person person3 = new Person("Kim", "Katowice", 35);
        Person person4 = new Person("Ghaffar","Lublin", 36);
        Person person5 = new Person("Zach","Radom", 19);
        aList.add(person1);
        aList.add(person2);
        aList.add(person3);
        aList.add(person4);
        aList.add(person5);
        System.out.println("The size of the list is:" + aList.size());
    }
    public static void oldestPerson(String[] names, int[] ages)
    {
        int index = 0;
        int oldest = ages[0];
        for ( int i=0; i < ages.length; i++)
        {

            if(ages[i] > oldest)
            {index = i;
                oldest = ages[i];
            }

            System.out.println("Person" + names[index] + "is the oldest:" +     ages    [index]);
        }
    }
2

Powinieneś w metodach przyjmowac Person[] a nie String[] i int[] i zwracać Person. Czyli ja bym zaczął od zaimplementowania:

Person theOldest = oldestPerson(people)
System.out.println("The oldest person is " + theOldest.name);

public Person oldestPerson(Person[] people) {
     // ....
}

W dwóch pozostałych, przyjmujesz Person[] oraz String city i zwracasz w pierwszym int (ilość osób) a w drugiej metodzie double (średnia)

1
  • formatowanie
  • Pętla po indeksie powinna być pętlą typu foreach, w javie pisanej
for(Person : people)
  • Prawdopodobnie by cię to ochroniło przed błędem jaki wskazał @pedegie
  • ewangeliści nowoczesności by oczekiwali wyrażeń lambda zamiast pętli
0

mam metodę która znajduje osobę z minimalnym wiekiem , która policzy ludzi z tego samego miejsca i która uzyskaj średni wiek dla osób z tego samego miejsca
Tylko nie wiem gdzie dokładnie powinny się znajdować
Ustawiłem jeszcze geter w klasie Person

0

@Max Wisel: Mozesz wrzucic te 3 metody w osobna nowo utworzona klase ale nazwania jej sie nie podejme :D

0

Poprawiona wersja OP:

import java.util.*;
import java.lang.*;
import java.io.*;

class Person {

    private String name;
    private String city;
    private int age;

    public Person(String name, String city, int age) {
        this.name = name;
        this.city = city;
        this.age = age;
    }
    
    public int getAge() {
    	return age;
    }
    
    public String toString() {
    	return "["+name+", "+ city + ", " + age + "]";
    }
}

class Persons {
  private Persons() {}
  static Optional<Person> oldest(Person[] input) {
  	return Arrays.stream(input).sorted(Comparator.comparing(Person::getAge).reversed()).findFirst();
  } 	
}

class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
        ArrayList<Person> aList = new ArrayList<Person>() {{
        
          add(new Person("Diana", "Dublin", 38));
          add(new Person("Arthur","New York", 49));
          add(new Person("Kim", "Katowice", 35));
          add(new Person("Ghaffar","Lublin", 36));
          add(new Person("Zach","Radom", 19));
        }};
        
        System.out.println("The size of the list is:" + aList.size());
        System.out.println("Oldest is: " + Persons.oldest(aList.toArray(new Person[0])));
    }
}

Resztę metod dorzuć do Persons. Ew. zamień tą klasę na wrapper kolekcji.
https://ideone.com/1kIm5t

1 użytkowników online, w tym zalogowanych: 0, gości: 1