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

Tablica wielowymiarowa i uzupełnienie liczbą 1 tylko 10% tablicy

Cloud VPS
0 głosów
497 wizyt
pytanie zadane 16 kwietnia 2019 w Java przez iCorpore Nowicjusz (120 p.)

Witam,
Chciałbym stworzyć kwadratową tablicę o wymiarach 23x23 i nadać początkową wartość wszystkim elementom 0. Następnie chciałbym, żeby w tablicy losowo pojawiały się 1, ale zajmowały jedynie 10% planszy. Załączam swój obecny kod. Na początku przypisałem wartość 0 wszystkim elementom. Ale głównie chodzi mi o drugą część. Chciałem, aby wybierało losowy indeks, a następnie w tym losowym indeksie przypisywało 1. Wszystko działa, ale zależy mi, żeby pokrywało tylko 10% tej tablicy.

int[][] tab = new int[23][23];
for (int i = 0; i < tab.length; i++) {
            for (int j = 0; j < tab.length; j++) {
tab[i][j] = 0;
   }
}


int losowyIndeks3 = (int)(Math.random() * 23);
int losowyIndeks4 = (int)(Math.random() * 23);
 for (int i = 0; i < tab.length; i++) {
            for (int j = 0; j < tab.length; j++) {
                tab[losowyIndeks3][losowyIndeks4] = 1;
                System.out.println(tab[i][j]);
            }
            }

 

2 odpowiedzi

0 głosów
odpowiedź 17 kwietnia 2019 przez mbabane Szeryf (79,260 p.)
edycja 17 kwietnia 2019 przez mbabane
Wyznacz ile w sumie ma miejsc ta tablica, potem z tego oblicz 10%. Następnie, wystarczy tylko losować indeksy z odpowiednich przedziałów.

Tak jeszcze na marginesie kod, który stworzyłeś jest oczywiście poprawny, jednak jest on nadmiarowy, bo domyślnie w javie tablice typu int, long, float, double itd. (typ prosty) są inicjalizowane zerem.
0 głosów
odpowiedź 17 kwietnia 2019 przez Arkadiusz Fajdek Dyskutant (9,450 p.)

Hej! Po pierwsze tak jak napisał @mbabane nie ma potrzeby resetować tablicy zerami, jest to zrobione z automatu przy intach. Taka moja propozycja rozwiązania 

public static void main(String[] args) {

        int tableSize = 23;
        int[][] tab = new int[tableSize][tableSize];
        int percentToFill = (int) (tableSize*0.1)*2;
        for (int i = 0; i < percentToFill; i++) {
            int randomX = (int)(Math.random() * 23);
            int randomY = (int)(Math.random() * 23);
            tab[randomX][randomY] = 1;
        }
    }

 

1
komentarz 17 kwietnia 2019 przez mbabane Szeryf (79,260 p.)
int percentToFill = (int) (tableSize*0.1)*2;

Powyższe chyba nie wyznacza 10% procent "powierzchni tablicy". "Powierzchnia tablicy" będzie wynosić tableSize*tableSize. I dopiero z tego trzeba wyznaczyć 10%.

1
komentarz 18 kwietnia 2019 przez l1llIllIIlllIllll Użytkownik (660 p.)
Nie chyba, tylko tak właśnie jest.
komentarz 18 kwietnia 2019 przez Arkadiusz Fajdek Dyskutant (9,450 p.)

@mbabane, oczywiście! Dzięki za ten komentarz! Chyba miałem zaćmienie mózgu :)

Podobne pytania

0 głosów
1 odpowiedź 605 wizyt
0 głosów
1 odpowiedź 349 wizyt
pytanie zadane 6 lutego 2016 w PHP przez Pytający Początkujący (290 p.)
0 głosów
0 odpowiedzi 383 wizyt
pytanie zadane 14 października 2022 w C i C++ przez Eliasz Nowicjusz (200 p.)

93,459 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 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

Kursy INF.02 i INF.03
...