problem z zadaniam java

0

//Uzupełnij program z zadania 5.4 (dowolny wariant) o metodę przeładowaną przyjmującą tablicę typu string oraz mnożnik typu int.
//W tym przypadku metoda ma powielać łańcuch znaków (konkatenować tyle razy, ile wynika z mnożnika). Przykładowo dla tablicy o
//elementach {"ala", "kot", "dom"} oraz mnożniku 2 program powinien wyświetlić tablicę {"alaala", "kotkot", "domdom"}.

   static int[] Multiple(int[] tab, int mnoznik){
           int[] tab1 = {1,4,6,8,2}; 
           for(int i = 0; i < tab1.length; i++ ){
             tab1[i] = tab1[i] * mnoznik;
             System.out.print(tab1[i]);
           }
           return tab1;
       }
    static String[] Multiple(String[]tab, int mnoznik){
           String[] tab1 = {"ania", "kasia", "karolina"};
             for(int i = 0; i < tab1.length; i++ ){
                   tab1[i] = tab1[i] + tab1[i];
                   System.out.println(tab1[i]);
                 }
             return tab1;
    }
    
   public static void main(String[] args) {
       // TODO code application logic here
       Scanner s = new Scanner(System.in);
       int[] tab2 = new int[5];
       String[] tab3 = new String[6];
       int mnoznik;
       mnoznik = s.nextInt();
       //int[] tab = Multiple(tab2, mnoznik);
       String[] tab = Multiple(tab3, mnoznik);
   }
   
}


Problem z  tym "metoda ma powielać łańcuch znaków (konkatenować tyle razy, ile wynika z mnożnika). Przykładowo dla tablicy o 
//elementach {"ala", "kot", "dom"} oraz mnożniku 2 program powinien wyświetlić tablicę {"alaala", "kotkot", "domdom"}. "

nie mam pojecia jak napisać taką funkcjonalnosc, druga petla musialaby byc for lub while ktora ogranicza to ilosci wykonania licznika ale nie wiem jak do konca to zaimplementowac. prosze o podpowiedz/ukierunkowanie
0

Zgadza się, w pętli for przebiegającej po wszystkich elementach tablicy powinna być druga pętla for, która idzie od 0 do (mnożnik - 1). To w zasadzie jedyna zmiana w podanym przez Ciebie kodzie metody przyjmującej tablicę stringów. Nie widzę tutaj trudności implementacyjnych (w stosunku do języka), aczkolwiek ja z Javą nie pracuję.

0

a dlaczego w pętli daje się mnożnik -1, a nie mnoznik? z jakiego powodu odejmuje sie jedna wartosc?
działa, ale mam problem wlasnie, ze jak dam wartosc wieksza nzi 2 czyli np 3 to wyswietla 4 razy . a dalam w petli mnoznik-1

0

Napisałem mnożnik - 1, ponieważ przyjąłem, że iterator (zmienną i w pętli) ustawiasz na początku na 0 (warunek początkowy pętli). Jeśli byś ustawił, że pętla ma przechodzić od 0 do mnożnik, to byłoby o jeden obrót pętli za dużo (to tak samo jak na historii – w którym wieku Rzymianie zburzyli Świątynię Jerozolimską (70 r. n.e.)? Nie w zerowym, bo nie ma wieku zerowego, tylko w pierwszym). Jeśli zaczynasz tę drugą pętlę for od 1, to oczywiście odejmowania od mnożnika nie będzie.

Co do drugiego pytania – pokaż kod, który napisałeś.


PS. Przepraszam, chyba zrobiłem błędne założenie. Oczywiście w pętli for dajesz albo znak <, albo <=. Jeśli ten pierwszy, to nie powinno być -1, a jeśli drugi, to powinno. Ale zamieszałem. ;)

0

```     static String[] Multiple(String[]tab, int mnoznik){
            String[] tab1 = {"ania", "kasia", "karolina"};
              for(int i = 0; i < tab1.length; i++ ){
                  for(int j = 0; j < mnoznik - 1; j++ )
                    tab1[i] = tab1[i] + tab1[i];
                    System.out.println(tab1[i]);
                  }
              return tab1;
     }
     
    public static void main(String[] args) {
        // TODO code application logic here
        Scanner s = new Scanner(System.in);
        int[] tab2 = new int[5];
        String[] tab3 = new String[6];
        int mnoznik;
        mnoznik = s.nextInt();
        //int[] tab = Multiple(tab2, mnoznik);
        String[] tab = Multiple(tab3, mnoznik);
    }
    
}
1

Już widzę, gdzie jest problem. Kod metody jest trochę zagmatwany, więc napiszę Ci lepiej:

static String[] Multiple (String[] tab, int mnoznik) {
    for (int i = 0; i < tab.length; i++ ) {
        String element = tab[i];
        for (int j = 0; j < mnoznik - 1; j++) {
            tab[i] = element + tab[i];
        }
    }
    return tab;
}

A tablicę ze stringami podajesz oraz wyświetlanie piszesz dopiero w funkcji main. Bo ponieważ , gdy wyświetlasz w funkcji Multiple, to najpierw wypisze Ci element nr 1, potem element nr 1 powiększony o jeden string obok tego pierwszego itd., a więc nie będzie samych wynikowych elementów, tylko wszystkie kroki po kolei.


PS. Jeszcze nie koniec błędów, czekaj.


No, teraz działa. :) Sprawdziłem na https://ideone.com/. Jednak musi tam być tak znaczek <, jak i -1. Do elementów tablicy tylko dodajesz (a nie zastępujesz, więc gdyby nie było -1, to by się pojawiał o ten jeden początkowy string za dużo (sprawdź sama)).

Ech, oduczyłem się programować, dlatego szło to tak opornie. Mam nadzieję, że nie zamotałem Ci.


Chyba jestem winien Ci jednak działającą wersję: https://ideone.com/6uTGMX

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