• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java funkcje tablice

Object Storage Arubacloud
0 głosów
215 wizyt
pytanie zadane 12 czerwca 2018 w Java przez uczen3354534 Nowicjusz (180 p.)
interesuje mnie druga funkcja

 

napisz funkcje czyPelnoletni, która jako parametr przyjmuje liczbe calkowita bedaca wiekiem osoby. dopuszczalne wartosci to przedzial [5;130], dla innych funkcja powinna wyrzucac wyjatek. funkcja zwraca wartosc true jezeli podany wiek jest rowny 18 korzystajac z tej funkcji napisz funkcje przyjmującą jako parametr tablice liczb calkowitych bedacych wiekiem dla grupy ludzi. funkcja ma zliczyc ilosc osób pelnoletnich
komentarz 12 czerwca 2018 przez adas94 Nałogowiec (29,200 p.)
Wszystko fajnie, ile masz zrobione i z czym masz konkretnie problem? :)
komentarz 12 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
pierwsza funkcję napisaną mam. Za tablicami nigdy nie przepadałem :/

1 odpowiedź

0 głosów
odpowiedź 12 czerwca 2018 przez adas94 Nałogowiec (29,200 p.)
Wszystko co musisz zrobić to napisać metodę, która w parametrze ma tablicę. Następnie pętlą for przejść po całej tablicy i w tym forze wywołać metodę, którą już napisałeś. Do tego robisz jakiś licznik w tej metodzie i za każdym razem kiedy wartość w tablicy się zgadza to go inkrementujesz. Na końcu robisz return licznika i tyle. ;)

Spróbuj to napisać i wklej tutaj kod jeśli będziesz miał wątpliwości.
komentarz 12 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
do fora doszedłem

public int IlePelnoletnich(int tab[]){
        for (int i = 0; i < 10; i++) {
            
        }
    }
komentarz 12 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
napisana wczesniej metoda musi byc przekazana z jakims parametrem?
komentarz 12 czerwca 2018 przez adas94 Nałogowiec (29,200 p.)

Kod wklejaj w bloczek do tego przeznaczony. (ułatwia czytanie)

public int IlePelnoletnich(int tab[]){
        for (int i = 0; i < 10; i++) {
            
        }
    }

Dlaczego i < 10 ? Nie wiadomo ile elementów ma tablica, może mieć np 20. Podajesz w parametrze tablicę więc wykorzystaj jej właściwość length. 

public int IlePelnoletnich(int tab[]){
        for (int i = 0; i < tab.length; i++) {
            
        }
    }

Pętlę już masz. Teraz musisz tylko dodać swoją wcześniejszą funkcję i wrzucać do niej każdy element tablicy. (I mieć licznik ile osób jest pełnoletnich)

public int IlePelnoletnich(int tab[]){
        int licznik = 0;
        for (int i = 0; i < tab.length; i++) {
            if(jestPelnoletni(tab[i])) {
                licznik++;
            }
        }
        return licznik;
    }

Czyli każdy jeden element tablicy jest sprawdzany (jestPelnoletni(tab[i] zwraca true lub false, jeśli zwróci true to licznik jest podnoszny bo znaczy to, że jest kolejna dorosła osoba w tej tablicy i na końcu zwracasz liczbę tych osób)

komentarz 12 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
public int IlePelnoletnich(int tab[]){
        int ilosc = 0;
   for (int i : tab) {
      if(czyPelnoletni(i))
         ilosc++;
   }
   return ilosc;
    }

 

komentarz 12 czerwca 2018 przez adas94 Nałogowiec (29,200 p.)
Dokładnie tak, natomiast typy prymitywne (int) zdaje się nie mogą być iterowane for-eachem tylko zwykłym forem.
komentarz 12 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
zaproponowano mi napisanie takiego fora choć sam nwm czy jest on w pełni poprawny
komentarz 12 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)

dzieki za pomoc. Jeszcze tylko testy dorobię i będzie git

komentarz 12 czerwca 2018 przez mbabane Szeryf (79,280 p.)
Jest poprawny.
komentarz 12 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
Jeszcze pytanko mam. Gdy piszę testy jednostkowe to musze w nich umieścić pole ilosc?
komentarz 13 czerwca 2018 przez mbabane Szeryf (79,280 p.)
Chyba nie bardzo rozumiem co masz na myśli z tym umieszczaniem pola ilość.
komentarz 13 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
problem się pojawił z testami. dla pierwszej funkcji nie działają, a błędow mi nie wyswietla
komentarz 13 czerwca 2018 przez mbabane Szeryf (79,280 p.)
edycja 13 czerwca 2018 przez mbabane

Pokaż funkcję i test.

 

Jeśli testujesz funkcję tą:

public int IlePelnoletnich(int tab[])
{
   int ilosc = 0;
   for (int i : tab) {
         if(czyPelnoletni(i))
                ilosc++;
     }
     return ilosc;
}

To test w JUnit może wyglądać np. tak:

@Test
public void whenPutThreeNumbersGreaterOrEqualThan18ThenShouldReturnThree()
{
     int[] ages = {11, 12, 20, 15, 19, 18};
     int expected = 3;

    UsersTools usersTools = new UsersTools();

    int actual = usersTools.IlePelnoletnich(ages);
    assertEquals(expected, actual );
}

Założyłem tylko, że metoda ilePelnoletnich i czyPelnoletni znajdują się w klasie UsersTools.

komentarz 15 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
co oznacza actual?
komentarz 15 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
edycja 15 czerwca 2018 przez uczen3354534
zrobilem tak jak napisales i dalej testy nie działają, a błędów nie wyświetla
komentarz 15 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)

zakomentowalem tutaj i teraz 1/3 testów działa

@Test
    public void testSomeMethod() {
        // TODO review the generated test code and remove the default call to fail.
       // fail("The test case is a prototype.");
    }

 

komentarz 15 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
z tabeli ages usunalem 3 elementy i test metody przeszedł pomyslnie. Jeszcze test dla pierwszej funkcji
komentarz 15 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package app;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 *
 * @author Adrian
 */
public class NewClassTest {
    
    public NewClassTest() {
    }
    
    @BeforeClass
    public static void setUpClass() {
    }
    
    @AfterClass
    public static void tearDownClass() {
    }
    
    @Before
    public void setUp() {
    }
    
    @After
    public void tearDown() {
    }

    @Test
    public void testSomeMethod() {
        // TODO review the generated test code and remove the default call to fail.
       // fail("The test case is a prototype.");
    }

    /**
     * Test of czyPelnoletni method, of class NewClass.
     */
    @Test
    public void testCzyPelnoletni() {
       System.out.println("czyPelnoletni");
        int wiek = 0;
      NewClass instance = new NewClass();
        boolean result;
        try{
            result = instance.czyPelnoletni(wiek);
  //          fail("nie ma wyjatku");
        }catch(IllegalArgumentException e){
            
        }
        wiek = 32;
        try{
            result = instance.czyPelnoletni(wiek);
//            fail("nie ma wyjatku");
        }catch(IllegalArgumentException e){
            
        }
         
       wiek = 23;
        try{
            result = instance.czyPelnoletni(wiek);
//           fail("nie ma wyjatku");
        }catch(IllegalArgumentException e){
            
        }
        
       wiek = -1;
        boolean expResult = false;
        result = instance.czyPelnoletni(wiek);
    
        assertEquals(expResult, result);
        
        wiek =20;
        expResult = true;
        result = instance.czyPelnoletni(wiek);
         
        assertEquals(expResult, result);
        
        assertTrue(instance.czyPelnoletni(25));
        assertTrue(instance.czyPelnoletni(31));
        
        
        assertFalse(instance.czyPelnoletni(4));
        assertFalse(instance.czyPelnoletni(5));
        
    }

    /**
     * Test of IlePelnoletnich method, of class NewClass.
     */
    @Test
    public void testIlePelnoletnich() {
        System.out.println("IlePelnoletnich");
        int[] tab = null;
        NewClass instance = new NewClass();
        int result;
        
        int[] wiek = {11, 12, 20};
     int expected = 3;

    NewClass NewClass = new NewClass();

    int actual = NewClass.IlePelnoletnich(wiek);
    assertEquals(expected, actual );
      
    }
    
}

 

komentarz 15 czerwca 2018 przez mbabane Szeryf (79,280 p.)

Kurde edytuj komentarz.....

expected oznacza wartość oczekiwaną, actual wartość aktualnie otrzymaną z metody.

Mialeś pokazać metody, ktore testujesz, bo umnie metoda czyPelnoletni wyglada tak:

protected boolean czyPelnoletni(int i)
    {
        return i >= 18;
    }

Szczerze powiedziawszy to mam trochę wrażenie, że nie do końca wiesz co robisz. Bo np. nazwa metody IlePelnoletnich sugeruje, że zliczy ile jest w tablicy wartości większych lub równych 18, tymczasem u Ciebie dla tablicy: {11, 12, 20} ta metoda zwraca liczbę 3, a według mnie (zgodnie z nazwa metody) powinna zwracać 1.

komentarz 15 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
public boolean czyPelnoletni(int wiek){
        if(wiek < 5){
            throw new IllegalArgumentException("wyjatek");}
        if(wiek>130){
            throw new IllegalArgumentException("wyjatek");
        }
        if(wiek >= 18){
            return true;
        }
        return true;
    }

 

komentarz 15 czerwca 2018 przez mbabane Szeryf (79,280 p.)

Zobacz co robisz...

 assertFalse(instance.czyPelnoletni(4));

Tymczasem w metodzie czyPelnoletni dla wartości mniejszych od 5 rzucasz wyjątek.

Jeszcze taka drobna porada, jeśli poniższe metody są puste:

 @BeforeClass
    public static void setUpClass() {
    }
     
    @AfterClass
    public static void tearDownClass() {
    }
     
    @Before
    public void setUp() {
    }
     
    @After
    public void tearDown() {
    }

to je wywal.

komentarz 15 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
przeoczenie
komentarz 15 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package app;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 *
 * @author Adrian
 */
public class NewClassTest {
    
    public NewClassTest() {
    }
    
    @BeforeClass
    public static void setUpClass() {
    }
    
    @AfterClass
    public static void tearDownClass() {
    }
    
    @Before
    public void setUp() {
    }
    
    @After
    public void tearDown() {
    }

    @Test
    public void testSomeMethod() {
        // TODO review the generated test code and remove the default call to fail.
       // fail("The test case is a prototype.");
    }

    /**
     * Test of czyPelnoletni method, of class NewClass.
     */
    @Test
    public void testCzyPelnoletni() {
       System.out.println("czyPelnoletni");
        int wiek = 0;
      NewClass instance = new NewClass();
        boolean result;
        try{
            result = instance.czyPelnoletni(wiek);
            fail("nie ma wyjatku");
        }catch(IllegalArgumentException e){
            
        }
        wiek = 32;
        try{
            result = instance.czyPelnoletni(wiek);
          fail("nie ma wyjatku");
        }catch(IllegalArgumentException e){
            
        }
         
       wiek = 23;
        try{
            result = instance.czyPelnoletni(wiek);
       fail("nie ma wyjatku");
        }catch(IllegalArgumentException e){
            
        }
        
       wiek = -1;
        boolean expResult = false;
        result = instance.czyPelnoletni(wiek);
      fail("nie ma wyjatku");
        assertEquals(expResult, result);
        
        wiek =20;
        expResult = true;
        result = instance.czyPelnoletni(wiek);
         
        assertEquals(expResult, result);
        
        assertTrue(instance.czyPelnoletni(25));
        assertTrue(instance.czyPelnoletni(31));
            
             
        assertFalse(instance.czyPelnoletni(5));
        
    }

/

komentarz 15 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
gdy zakomentuje faild w 64 linijce to chce zebym to samo zrobil z kolejnymi faildami, a jak je zakomentuje to wywala mi blad w 79 taki sam jak na obrazku wczesniej
komentarz 15 czerwca 2018 przez mbabane Szeryf (79,280 p.)

Patrz co robisz.........

W 32 linijce powyższego listningu - zgłaszasz sobie fail od tak.

    wiek = -1;
        boolean expResult = false;
        result = instance.czyPelnoletni(wiek);
      fail("nie ma wyjatku");
        assertEquals(expResult, result);

A tego false to nigdy nie dostaniesz, bo w metodzie czyPelnoletni albo zwracasz true, albo rzucasz wyjątki.

I patrz na komunikat bo jest podane, w której linijce być może jest błąd.

komentarz 15 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
Czy assertFalse koniecznie musi występować w testach?

poprawiłem kod i za komentowałem wspomnianą cześć kodu i testy przeszły
komentarz 15 czerwca 2018 przez mbabane Szeryf (79,280 p.)

Czy assertFalse koniecznie musi występować w testach?

To co ma być w testach zależy tylko i wyłącznie od Ciebie. W tym przypadku wydaje się, że taki test powinien się znaleźć, ponieważ, co się stanie jak ktoś poda wiek 11? Według działania metody wynika, że taka osoba będzie pełnoletnia. Więc tak na prawdę ten test spełnił swoją rolę bo wykrył, że metoda jest złe zrobiona.Tak więc to nie test jest u Ciebie problemem, a implementacja metody czyPelnoletni.

komentarz 15 czerwca 2018 przez uczen3354534 Nowicjusz (180 p.)
no to nwm co źle zrobiłem w tej metodzie
komentarz 15 czerwca 2018 przez mbabane Szeryf (79,280 p.)

to ją przeanalizuj np. na kartce, tam są raptem 3 linijki - i ograniczają się do rozumienia działania if.

Podobne pytania

0 głosów
1 odpowiedź 222 wizyt
pytanie zadane 18 stycznia 2022 w Java przez michal441599 Użytkownik (530 p.)
–1 głos
0 odpowiedzi 572 wizyt
pytanie zadane 13 marca 2020 w Java przez Zefir Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 1,159 wizyt

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...