Wyszukiwanie określonych wartości w tablicach obiektów

0

Witam. Od jakiegoś czasu uczę się Javy. Chciałbym się dowiedzieć jak do tablicy obiektów stworzyć metodę, która wyświetli nazwy tylko tych obiektów, dla których zgadzają się podane wartości i wylosuje jeden z nich. Jak do tej pory udało mi się to pierwsze i wygląda to tak:

public class FiguryProstokatne {
	
	private String nazwa;
	private boolean katProsty;
	
	public String getNazwa()
	{
	return nazwa;	
	}
	
public FiguryProstokatne (String nazwa, boolean katProsty) 
{
	this.nazwa = nazwa;
	this.katProsty = katProsty;
}

public static void main(String[]args)
{
FiguryProstokatne[] listaFigur = new FiguryProstokatne[4];

listaFigur[0] = new FiguryProstokatne("koło", false);
listaFigur[1] = new FiguryProstokatne("kwadrat", true);
listaFigur[2] = new FiguryProstokatne("romb", false);
listaFigur[3] = new FiguryProstokatne("prostokat", true);


for (int i = 0; i<listaFigur.length; i++)
{
{
		if (listaFigur[i].katProsty ==true)
		{
		System.out.println(listaFigur[i].nazwa);
		}

}
}
}
}

I tutaj chciałem zapytać po pierwsze:
Czy w tym przypadku żeby kod był w porządku powinienem stosować getter do obiektu tablicy zamiast bezpośredniego odwołania do pola: listaFigur[i].nazwa?
Po drugie: Co zrobić żeby spośród elementów dla których katProsty ma wartość true, był wybierany jeden, losowy?
Po trzecie: Czy całość można zrobić prościej, przy pomocy metod gotowych klas, np. Arrays?

0
paranoise napisał(a):

I tutaj chciałem zapytać po pierwsze:
Czy w tym przypadku żeby kod był w porządku powinienem stosować getter do obiektu tablicy zamiast bezpośredniego odwołania do pola: listaFigur[i].nazwa?

Tak. Przy czym jak wszystko po polsku to "dajNazwa".

Po drugie: Co zrobić żeby spośród elementów dla których katProsty ma wartość true, był wybierany jeden, losowy?

Dowolny czy losowy?
https://stackoverflow.com/questions/25912185/java-8-stream-findany-vs-finding-a-random-element-in-the-stream

Po trzecie: Czy całość można zrobić prościej, przy pomocy metod gotowych klas, np. Arrays?

Można krócej: https://stackoverflow.com/questions/32262059/java-find-element-in-array-using-condition-and-lambda
https://dzone.com/articles/java-lambda-expressions-vs
użyj

filer(FiguryProstokatne::czyKatProsty)

Kilka uwag co do kodu:

  • nazywaj klasy liczbą pojedynczą jeśli nie są kontenerami, czyli FiguryProstokatne -> FiguraProstokatna
  • pisz kod po angielsku, jeśli w ogóle nie znasz, całkiem po polsku
  • formatuj kod przed wstawieniem na forum
  • nie stosuj "true" lub "false" w warunkach, czyli
    zamień
if (listaFigur[i].katProsty ==true)

na

if (listaFigur[i].katProsty)
0

Dowolny czy losowy?
https://stackoverflow.com/que[...]-random-element-in-the-stream>

Jeśli dobrze rozumiem, dowolny w pewnych przypadkach będzie zwracał mi zawsze ten sam wynik, czyli chodzi mi o losowy.

formatuj kod przed wstawieniem na forum>

Myślałem, że jeśli daję kod źródłowy i cytaty w znaczniki, to jest w porządku. Nie bardzo wiem co jest nie tak.

Można krócej: https://stackoverflow.com/que[...]ay-using-condition-and-lambda
https://dzone.com/articles/java-lambda-expressions-vs
użyj

filer(FiguryProstokatne::czyKatProsty)

Sorry, ale siedziałem nad tym i mimo wszystko nic nie wymyśliłem. Da się może zamienić:

for (int i = 0; i<listaFigur.length; i++)
{
{
        if (listaFigur[i].katProsty)
        {
        System.out.println(listaFigur[i].nazwa);
        }

Na coś co zamiast wyświetlać obiekty pasujące do warunku, tworzyłoby mniejszą tablicę, obiektów spełniających warunek?
Próbowałem jakoś tak:

for (int i = 0; i<listaFigur.length; i++)
{
{
        if (listaFigur[i].katProsty)
        {
	FiguryProstokatne listaFigurProstokatnych[] = listaFigur[i];
        }

Na różne sposoby, ale pewnie z zasady to jest źle, więc przydałaby mi się pomoc.

0

Poczytaj o java stream. To powinno Ci przefiltrować tylko te elementy, które maja kąt prosty i zebrać je w liście.

   List<FiguryProstokatne > collect = Arrays.asList(listaFigur).stream().filter(i -> i.isKatProsty() == true).collect(Collectors.toList());
0
paranoise napisał(a):

Myślałem, że jeśli daję kod źródłowy i cytaty w znaczniki, to jest w porządku. Nie bardzo wiem co jest nie tak.

Podczas pisania treści postu, nad oknem edycji masz zestaw guzików. Wybierz ostatni z małym trójkątem i następnie wybierz Język.

for (int i = 0; i<listaFigur.length; i++)
{
{
        if (listaFigur[i].katProsty)
        {
	FiguryProstokatne listaFigurProstokatnych[] = listaFigur[i];
        }

Na różne sposoby, ale pewnie z zasady to jest źle, więc przydałaby mi się pomoc.

Zadeklaruj drugą tablicę przed pętlą, a w pętli tylko ją uzupełniaj.

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