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

Dzielenie tablicy na dwie podtablice

VPS Starter Arubacloud
0 głosów
781 wizyt
pytanie zadane 8 kwietnia 2019 w Java przez Paweł Szewczyk Obywatel (1,410 p.)
edycja 6 października 2019 przez Paweł Szewczyk

Jak mogę podzielić taka tablice na osobne elemnty, czyli zamienić te tablice ("0. word_ang - word_pl 1. gap year - rok przerwy po ukonczeniu szkoly sredniej 2. safety course - kurs zasad bezpieczenstwa") na ("0. word_ang - word_pl","1. gap year - rok przerwy po ukonczeniu szkoly sredniej","2. safety course - kurs zasad bezpieczenstwa") oraz jak usunąć pierwszy element z tablicy ?

private String [] word=new String[]{
                "0. null_ang   -   word_pl","1. gap year / take a gap year   -   rok przerwy po ukończeniu szkoły średniej",
                "2. safety course   -   kurs zasad bezpieczeństwa" , "3. increase   -   zwiększać się (o ilości/jakości)" ,
                "4. decrease   -   zmniejszać się (o ilości/jakości)" , "5. within walking distance   -   w odległości, którą można pokonać pieszo" ,
                "6. mention   -   wspomnieć o czymś" , "7. overland   -   drogą lądową / naziemny" ,
                "8. memorable   -   niezapomniany/ godny zapamiętania" , "9. sign up with   -   zapisać się/zaangażować/związać się z " ,
                "10. deliverer   -   doręczyciel/dostawca" , "11. paragliding   -   paralotnia" ,
                "12. placement   -   położenie/lokalizacja" , "13. research   -   badania naukowe" ,
                "14. expences   -   wydatki" , "15. cruise ship   -   statek rejsowy" ,
                "16. on board   -   na pokładzie" , "17. off the coast   -   z daleka od brzegu" , "18. available   -   dostępne" ,
                "19. working hours   -   godziny pracy" , "20. deal with   -   radzić sobie z" , "21. counsellor   -   doradca/opiekun" ,
                "22. freelance   -  pracować jako wolny strzelec" , "23. call back   -   oddzwonić później" , "24. take on   -    zatrudniać" ,
                "25. hold a certificate   -   posiadać dyplom" , "26. put through   -   połączyć przez telefon" , "27. flood   -   powódź" ,
                "28. volcanic eruption   -   wybuch wulkanu" , "29. drought   -   susza" , "30. pollution   -  zanieczyszczenie" ,
                "31. earthquake   -   trzęsienie ziemi" , "32. pump out   -   wypompowywać/emitować" ,
                "33. toward   -    w kierunku" , "34. grow   -  rosnąć/uprawiać" , "35. canoe   -   kajak" ,
                "36. fireworks   -    fajerwerki" , "37. light up   -  rozświetlić" , "38. sheke   -  trząść się" ,
                "39. fall off   -   spadać/odpadać" , "40. twister   -   tornado/trąba powietrzna" , "41. calm   -   spokojny/nieporuszony" ,
                "42. weatherman   -   prezenter pogody" , "43. strike   -   uderzyć/nadejść/dopaść" , "44. pray   -   modlić się" ,
                "45. prayer   -   modlitwa" , "46. put down   -   wpisywać/kłaść" , "47. huge   -   ogromny/olbrzymi" ,
                "48. directly   -  bezpośrednio" , "49. unexpected   -   nieoczekiwany" ,
                "50. expected   -   oczekiwany" , "51. chase   -   gonić/ścigać" ,
                "52. awake   -   obudzony/przebudzony/obudzić/przebudzić się" , "53. prediction   -    przewidywanie" ,
                "54. predict   -   przewidywać" , "55. spontaneous decision   -   decyzja spontaniczna" ,
                "56. global warming   -   globalne ocieplenie" , "57. rising level   -   podnoszący się poziom" ,
                "58. cover   -    przykrywać/pokrywać/przykrywa/pokrywa (czasownik i rzeczownik)" , "59. glacier   -   lodowiec" ,
                "60. well   -   studnia" , "61. cause   -   powodować" , "62. precious   -   drogocanny" ,
                "63. collect donations   -   zbierać datki" , "64. fossil fuel   -   paliwo kopalne" ,
                "65. ice cap   -   pokrywa lodowa" , "66. blanket   -   koc" , "67. shortage   -   brak/niedobór" , "68. leak   -   przeciekać/wyciek" ,
                "69. dispose of   -   unieszkodliwić/uporać się z" , "70. dump   -   skład/zrzut" , "71. breed   -   rasa/gatunek" ,
                "72. die out   -   wymrzeć/wyginąć" , "73. scarce   -   rzadki/mało spotykany" , "74. look for   -   szukać" ,
                "75. look after   -   opiekować się" , "76. cub   -   kocię/młode" , "77. cuddly   -   milutki" ,
                "78. fierce-looking   -   wyglądający groźnie" , "79. habitat   -   środowisko/miejsce występowania" ,
                "80. in case of   -   w razie/jeśli wystąpi"
        };

         private String[] word_pl = new String[word.length-1];
         private String[] word_ang = new String[word.length-1];
         //private String[] word_split=new String[word.length];

          private List<List<String>> output = new ArrayList<List<String>>();

        public void spliting_word(){

            //usuwanie poczatku zmiennej i.
            for(i=0;i<=word.length-1;i++)
            {
                word[i] = word[i].replace(i+". ","");
                //System.out.println(word[i]);
            }
            //dzielenie balicy word na tablice [0]-ang [1]-pl
            String[]newArray=new String[word.length];
            for(i=0;i<=word.length-1;i++) {
               String[] word_split = word[i].split(" - ");
               System.out.println(word_split[0]);
               /*
               for(i=0;i<10;i++) {
                   System.out.println(word_split[0]);
               }
                for(i=0;i<=100;i++) {
                    //newArray[i] = word_split[0].split(" ");
                    System.out.println(newArray[0]);
                }
/*          }
                String[][] wordsArray = new String[word_split.length][];
                for(int i=0;i<word_split.length;i++){
                    wordsArray[i][0]=word_split[0];
                }
                System.out.println(Arrays.deepToString(wordsArray));
*/
            }


        }

 

 

1 odpowiedź

+1 głos
odpowiedź 9 kwietnia 2019 przez Hexatorn Bywalec (2,240 p.)
wybrane 11 kwietnia 2019 przez Paweł Szewczyk
 
Najlepsza

Nie wiem czy dobrze rozumiem co potrzebujesz.
Ja do przechowywania takich danych stworzyłbym  jak poniżej. Daj znać czy o coś takiego chodziło?

 

import java.util.HashMap;
import java.util.Map;

public class Main {

    public static void main(String[] args) {
        TwoLanguageWords words = new TwoLanguageWords();
        words.add("gap year / take a gap year","rok przerwy po ukończeniu szkoły średniej");
        words.add("safety course","kurs zasad bezpieczeństwa");
        //... itp


        System.out.println(words.getPlWorld("safety course"));
        //result
        // kurs zasad bezpieczeństwa
        System.out.println(words.getEnWorld("rok przerwy po ukończeniu szkoły średniej"));
        //result
        //gap year / take a gap year
    }
}

class TwoLanguageWords{
    Map<String,String> twoWordsEnKey = new HashMap<>();
    Map<String,String> twoWordsPlKey = new HashMap<>();

    void add(String enWord, String plWord){
        twoWordsEnKey.put(enWord,plWord);
        twoWordsPlKey.put(plWord,enWord);
    }

    String getPlWorld(String enWorld){
        return twoWordsEnKey.get(enWorld);
    }

    String getEnWorld(String plWorld){
        return twoWordsPlKey.get(plWorld);
    }

}

 

komentarz 9 kwietnia 2019 przez Paweł Szewczyk Obywatel (1,410 p.)
Chodziło mi bardziej o to, czy mając tablice słów (word) jestem wstanie podzielic jakos te tablice na dwie (pl. i ang.) mogąc odwołać się do konkretnego słowa np.: Word_pl., a nie tylko do grupy np.: grupy wyrazów polskich.
komentarz 9 kwietnia 2019 przez Hexatorn Bywalec (2,240 p.)

Chodziło mi bardziej o to, czy mając tablice słów (word) jestem wstanie podzielic jakos te tablice na dwie (pl. i ang.)

Na pierwszy rzut oka wydawało mi się że twój kod sobie radzi z podziałem na dwie tablice.
Byłeś nawet całkiem blisko. Ale zawaliłeś sterowanie pętlami. Zamiast patrzeć na szczegóły czytałem logikę i wyglądało ok.  Po odpaleniu okazało się że jest zabawnie :)

Wcześniej skupiłem się na tym że chcesz


abym mógł odwołać się do konkretnego elementu np null_ang z tablicy

i wydawało mi się że chcesz się odwoływać do tablicy przez użycie wartości z tej tablicy.
Podajesz słowo po polsku a otrzymujesz po angielsku.

Poniżej kod który poprawnie rozdziela to na dwie tablice i tona komentarza z mojej strony.

import java.util.*;

public class Main {

    private String [] word=new String[]{
            "0. null_ang   -   word_pl","1. gap year / take a gap year   -   rok przerwy po ukończeniu szkoły średniej",
            "2. safety course   -   kurs zasad bezpieczeństwa" , "3. increase   -   zwiększać się (o ilości/jakości)" ,
            "4. decrease   -   zmniejszać się (o ilości/jakości)" , "5. within walking distance   -   w odległości, którą można pokonać pieszo" ,
            "6. mention   -   wspomnieć o czymś" , "7. overland   -   drogą lądową / naziemny" ,
            "8. memorable   -   niezapomniany/ godny zapamiętania" , "9. sign up with   -   zapisać się/zaangażować/związać się z " ,
            "10. deliverer   -   doręczyciel/dostawca" , "11. paragliding   -   paralotnia" ,
            "12. placement   -   położenie/lokalizacja" , "13. research   -   badania naukowe" ,
            "14. expences   -   wydatki" , "15. cruise ship   -   statek rejsowy" ,
            "16. on board   -   na pokładzie" , "17. off the coast   -   z daleka od brzegu" , "18. available   -   dostępne" ,
            "19. working hours   -   godziny pracy" , "20. deal with   -   radzić sobie z" , "21. counsellor   -   doradca/opiekun" ,
            "22. freelance   -  pracować jako wolny strzelec" , "23. call back   -   oddzwonić później" , "24. take on   -    zatrudniać" ,
            "25. hold a certificate   -   posiadać dyplom" , "26. put through   -   połączyć przez telefon" , "27. flood   -   powódź" ,
            "28. volcanic eruption   -   wybuch wulkanu" , "29. drought   -   susza" , "30. pollution   -  zanieczyszczenie" ,
            "31. earthquake   -   trzęsienie ziemi" , "32. pump out   -   wypompowywać/emitować" ,
            "33. toward   -    w kierunku" , "34. grow   -  rosnąć/uprawiać" , "35. canoe   -   kajak" ,
            "36. fireworks   -    fajerwerki" , "37. light up   -  rozświetlić" , "38. sheke   -  trząść się" ,
            "39. fall off   -   spadać/odpadać" , "40. twister   -   tornado/trąba powietrzna" , "41. calm   -   spokojny/nieporuszony" ,
            "42. weatherman   -   prezenter pogody" , "43. strike   -   uderzyć/nadejść/dopaść" , "44. pray   -   modlić się" ,
            "45. prayer   -   modlitwa" , "46. put down   -   wpisywać/kłaść" , "47. huge   -   ogromny/olbrzymi" ,
            "48. directly   -  bezpośrednio" , "49. unexpected   -   nieoczekiwany" ,
            "50. expected   -   oczekiwany" , "51. chase   -   gonić/ścigać" ,
            "52. awake   -   obudzony/przebudzony/obudzić/przebudzić się" , "53. prediction   -    przewidywanie" ,
            "54. predict   -   przewidywać" , "55. spontaneous decision   -   decyzja spontaniczna" ,
            "56. global warming   -   globalne ocieplenie" , "57. rising level   -   podnoszący się poziom" ,
            "58. cover   -    przykrywać/pokrywać/przykrywa/pokrywa (czasownik i rzeczownik)" , "59. glacier   -   lodowiec" ,
            "60. well   -   studnia" , "61. cause   -   powodować" , "62. precious   -   drogocanny" ,
            "63. collect donations   -   zbierać datki" , "64. fossil fuel   -   paliwo kopalne" ,
            "65. ice cap   -   pokrywa lodowa" , "66. blanket   -   koc" , "67. shortage   -   brak/niedobór" , "68. leak   -   przeciekać/wyciek" ,
            "69. dispose of   -   unieszkodliwić/uporać się z" , "70. dump   -   skład/zrzut" , "71. breed   -   rasa/gatunek" ,
            "72. die out   -   wymrzeć/wyginąć" , "73. scarce   -   rzadki/mało spotykany" , "74. look for   -   szukać" ,
            "75. look after   -   opiekować się" , "76. cub   -   kocię/młode" , "77. cuddly   -   milutki" ,
            "78. fierce-looking   -   wyglądający groźnie" , "79. habitat   -   środowisko/miejsce występowania" ,
            "80. in case of   -   w razie/jeśli wystąpi"
    };

    private String[] word_pl = new String[word.length-1];
    private String[] word_ang = new String[word.length-1];
    //private String[] word_split=new String[word.length];

    private List<List<String>> output = new ArrayList<List<String>>();

    public static void main(String[] args) {
        Main main = new Main();


/*        {
            //String str = "geekss@for@geekss";
            String str = "0. null_ang   -   word_pl";
            String[] arrOfStr = str.split(" - ");

            for (String a : arrOfStr)
                System.out.println(a);
        }*/

        main.spliting_word();
    }

    public void spliting_word(){


        //usuwanie poczatku zmiennej i.
        //@Hex Twój kod
        /*
        for(i=0;i<=word.length-1;i++)
        {
            word[i] = word[i].replace(i+". ","");
            //System.out.println(word[i]);
        }*/
        //@Hex dodałem deklaracje zmiennej i w pętli, zakładam że miałeś to zadeklarowane gdzieś wcześniej
        for(int i=0;i<=word.length-1;i++) {
            word[i] = word[i].replace(i+". ","");
        }

        //dzielenie balicy word na tablice [0]-ang [1]-pl
        String[]newArray=new String[word.length];

        //@Hex twój kod
        /*for(i=0;i<=word.length-1;i++) {*/
        //@Hex Poraz kolejny brak deklaracji zmiennej i w twoim kodzie. Jeszcze nie jest to duży problem w porównaniu z tym co jest dalej.
        //@Hex Dla ułatwienia dalej będe te pętle nazywał Zewnętrzną
        String[][] wordsArray = new String[2][word.length];

        for(int i=0;i<=word.length-1;i++) {
            //@Hex dodałem wypisanie wartości aby zrozumieć co się dzieje u ciebie w kodzie
            System.out.println();
            System.out.println(word[i]);

            //@Hex twój kod
            //String[] word_split = word[i].split(" - ");
            /* @Hex Zmieniłem wyrażenie regularne za pomocą którego odzielasz wartości,
             * jeżeli nie wiesz co to wyrażenie regularne to przyjmij że to (specjalny) String który to rozdziela
             * Chyba nie chcemy "słów które zaczymają się od kilku spacji"
             * */
            String[] word_split = word[i].split("   -   ");

            //@Hex od tąd miałeś zakomentowany kod
            //@Hex Twój kod był taki
            /*for(i=0;i<10;i++) {
                System.out.println(word_split[0]);
            }*/
            /*@Hex LEpiej jest to napisać tak, nie wiem dlaczego zakładałeś że będzie 10  elementów tablicy
            * Po 1
            * Metoda split zawsze zwraca tablice 2 elementową, zrozumiałbym tu 1, lun skożystanie z tablicy lenght
            * Po 2
            * Zamiast wypisywać 10 razy pierwszy element tablicy zakładam że chciałeś zobaczyć co jest w tablicy i wypisać jej zawartość
            * Zamiast System.out.println(word_split[0]) powinno być System.out.println(word_split[i]). Wtedy jednak miałbyś błąd wykonania praogramu bo tablica ma 2 elementy a nie 10.
            * Po 3
            * W tym przypadku błedem jest to że w pętli zewnętrznej i wewnętrznej używasz tej samej zmiennej jako licznika (zmienna i) ilości wykonań.
            * Czasami użycie wspólnego licznika może być celowe więc nie chcę absolutnie negować takiego użycia.
            * Zalecam jednak utrzymywanie odzielnych nazww dla zmiennych dla liczników gdy wewnątrz jednej pętli rozpoczynasz drugą pętle. Gdy pętle są jedna po drugiej nie jest to konieczne. Poniżej dokładny opis tego co się dzieje u ciebie.
            *
            *
            * Tu się zaczyna zabawa. Tą petle będe nazywał pętlą wewnętrzną nr I Chciałbym abyś zrozumiał co tu jest nie tak. Poniżej masz opis tego co się tu dzieje.
            * Pętla zewnętrzna zaczyna wykonanie od 0, dzielisz pierwszy String na 2, dochodzisz do pętli wewnętrznej nr.I ustawiasz i znoowu na 0 i 10 razy wypisujesz pierwszy element tablicy word_split co opisałem punkt wyżej.
            * Puki co nie odkomentowałem kolejnych pętli i pominę je w tym opisie . Po wykonaniu tej pętli sterowanie wraca do pętli zewnętrznej twoje i = 9.
            * Następnie pętla zewnętrzna kończy swoje pierwsze wykonanie i zwiększa zmienną i. Teraz i = 10
            * Następnie rozpoczyna się druga iteracja pętli gdzie dzielisz 11 element tablicy (word[10].split ...) na dwa Stringi
            * Potem znowu pętla wewnętrzna gdzie zmieniasz i na 0 i 10 razy wypisujesz 10 razy wypisujesz pierwszy element tablicy word_split. Pętla wewnętyrzna siuę kończy z i ustawionym na 9.
            * Znów koniec wykonania pętli zewnętrznej która zwiększa i, i = 10 i ponownie dzielisz 11 element tablicy (word[10].split ...) na dwa Stringi. I tak w koło Macieju...
            * I tak stworzyłeś pętle która nie ma końca.
            * */
            /*for(int j=0;j<word_split.length;j++) {
               System.out.println(word_split[j]);
            }*/
            //Ja jednak preferuje uzycie pętli foreach
            for (String word : word_split ){
                System.out.println(word);
            }
            //@Hex Twój kod był taki
            /*for(i=0;i<=100;i++) {
                //newArray[i] = word_split[0].split(" ");
                System.out.println(newArray[0]);
            }*/
            /*
            * Nie rozumiem po co miałbyś próbować wypisywać zawartość tablicy newArray. Nic do tej tablicy jeszcze nie ma.
            * */

            //@Hex Twój kod był taki
            /*} @Hex Zakładam że tej klamerki zamykającej miało tu nie być i postawiłeś ja rzypadkiem
                String[][] wordsArray = new String[word_split.length][];
                for(int i=0;i<word_split.length;i++){
                    wordsArray[i][0]=word_split[0];
                }
                System.out.println(Arrays.deepToString(wordsArray));
            */

            //@Hex twój kod
            //String[][] wordsArray = new String[word_split.length][];
            /*
            * @Hex Kożystasz tu z tablicy dwu-wymiarowej. Mozna to porównać do tabelki z wierszami i kolumnami.
            * word_split.length - > mówi ile kolumn ma mieć ta tabelka. Trzzeba wskazać także ile ma mieć wierszy. Jeżeli nie chcesz wskazywać ile ma być wierszy to zamiast Tablicy należało by uzyć np. ArrayList.
            * Deklaracja  i inicjalizacja wordsArray musi być przed pętlą zewnętrzną. Zainicjalizowanie jej wewnątrz pętli będzie prowadziło do tego że tablica będzie czyszczona z każdym wykonanioem pętli.
            * */

            //@Hex twój kod
            /*for(int j=0;j<word_split.length;j++){
                wordsArray[j][0]= word_split[0];
            }*/
            /*
            * @Hex Jak miło że dla odmiany zadeklarowałeś licznik w pętli :)
            * Niestetu miasiałem go zmienić bo i jest już wykozysztywane w zewnętrznej pętli
            */

            for(int j=0;j<word_split.length;j++){
                wordsArray[j][i]= word_split[j];
            }
            //@Hex twój kod
            //System.out.println(Arrays.deepToString(wordsArray));
            /*
            * Nie znałem tej metody klasy Array, Nauczyłem się czegoś od cziebie :)
            * Twoje wykonanie jest okej jednak ja wolę tak, lepiej mi się na to patrzy :)
            * */
            System.out.println(Arrays.deepToString(wordsArray[0]));
            System.out.println(Arrays.deepToString(wordsArray[1]));
        }
    }
}

Wyjaśnij jak chcesz się odwoływać do tych tablic. Czy może to już załatwia wszystko.

Sporo nauki programowania jeszcze przed tobą. Jak będziesz potrzebował wsparcia to pisz. Ja na tym etapie co ty wstydziłbym się zadać pytanie na forum, więc podziwiam !!

Może zanim zaczniesz sam coś własnego pisać to warto by zacząć od jakiś kursów i Tutoriali gdzie masz wyjaśnione linijka po linijce, albo nawet od książki. Nauka programowania z książek jest mało popularna ale mam wrażenie że tobie pomogło by ogarnąć podstawy.
 

komentarz 11 kwietnia 2019 przez Paweł Szewczyk Obywatel (1,410 p.)
Dzięki wielkie :D
komentarz 11 kwietnia 2019 przez Paweł Szewczyk Obywatel (1,410 p.)
edycja 11 kwietnia 2019 przez Paweł Szewczyk

@Hexatorn,  naprawdę genialny kod dziękuje bardzo również za warstwę narracyjną wyjaśniająca mi moje błędy. Widze, że miałeś straszny problem z moim kodem wybacz cheeky po prostu java to cos dla mnie nowego. Wybacz za aż taki problem, tym bardziej dzięki za pomoc

 

Podobne pytania

0 głosów
2 odpowiedzi 758 wizyt
0 głosów
3 odpowiedzi 379 wizyt
pytanie zadane 16 lipca 2018 w C i C++ przez HitMan Użytkownik (850 p.)
0 głosów
1 odpowiedź 196 wizyt
pytanie zadane 13 listopada 2016 w C i C++ przez alchem Obywatel (1,210 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...