Zwiększanie pojemności tablicy

Odpowiedz Nowy wątek
2019-06-29 18:23
0

Witam.

Posiadam pewną klasę

public class Blok

W tej klasie mam tablice

 public static final Blok[] mieszkania = {
            new Blok("Mieszkanie 1", "25", "12", "8", "6", "5"),
            new Blok("Mieszkanie 2", "29", "19", "10", "0", "0"),
    };

Tablica powiązana jest z ListView w której dokonujemy wyboru pozycji aby przejść do szczegółów. Jeśli tych pozycji new Blok jest do 10 to wszystko jest ok. Natomiast jeśli tablica zostanie rozbudowana ponad 10 to wszystkie opcje, które mają indeks od 10 wzwyż powodują błąd: java.lang.ArrayIndexOutOfBoundsException: length=10; index=11.
Jak mogę rozbudować tą tablicę aby jak będzie posiadała np: 20 pozycji to aby nie wyrzucało mi błędu że jestem poza obszarem tablicy ???

Pozostało 580 znaków

2019-06-29 18:51
2

A nie lepiej skorzystać z List<blok> lub Set<blok> ?

Ps. Pokaż kod pętli która iteruje po tablicy

edytowany 1x, ostatnio: au7h, 2019-06-29 18:54

Pozostało 580 znaków

2019-06-29 19:57
0
au7h napisał(a):

A nie lepiej skorzystać z List<blok> lub Set<blok> ?

Ps. Pokaż kod pętli która iteruje po tablicy

Nie mam pętli. onClick elementu ListView bezpośrednio odnosi się do konkretnego zasobu w tablicy, który następnie jest wczytywany do TextView w nowej aktywności.

Trochę inny kod ale ten sam problem
Klasa MainActivity

package pl.nynacode.lernfoecalculator;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Obiekt nasłuchujący onItemClickListener
        AdapterView.OnItemClickListener itemClickListener = new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> listView, View itemView, int position, long id) {
                Intent intent = new Intent(MainActivity.this,Poziomy.class);
                if(position == 0) {intent.putExtra(Poziomy.EXTRA_GREAD_BUILDING, (int) id);}
                if(position == 1) {intent.putExtra(Poziomy.EXTRA_GREAD_BUILDING, (int) id);}
                startActivity(intent);
            }
        };
        // Obiekt nasłuchujący do widoku listy
        ListView listView = (ListView) findViewById(R.id.lista_perel);
        listView.setOnItemClickListener(itemClickListener);
    }
}

Klasa Poziomy

package pl.nynacode.lernfoecalculator;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class Poziomy extends AppCompatActivity {

    public static final String EXTRA_GREAD_BUILDING = "gbID";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_poziomy);

        // Pobranie wybranej perły
        int gbID = (Integer) getIntent().getExtras().get(EXTRA_GREAD_BUILDING);
        Perly perly = Perly.perla[gbID];

        if(gbID == 0) {
            final int choiceBuilding = 0;
            ArrayAdapter<Arka> listAdapter = new ArrayAdapter<>(
                    this, android.R.layout.simple_list_item_1, Arka.poziomy);
            ListView listaPerel = (ListView) findViewById(R.id.level_list);
            listaPerel.setAdapter(listAdapter);

            // Obiekt nasłuchujący
            AdapterView.OnItemClickListener itemClickListener = new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> listaPerel, View view, int position, long id) {
                    Intent intent = new Intent(Poziomy.this, OpisPoziomu.class);
                    intent.putExtra(OpisPoziomu.EXTRA_LEVELID, (int) id);
                    intent.putExtra(OpisPoziomu.EXTRA_CHOISE_BUILDING, (int) choiceBuilding);
                    startActivity(intent);
                }
            };
            listaPerel.setOnItemClickListener(itemClickListener);
        }
        if(gbID == 1) {
            final int choiceBuilding = 1;
            ArrayAdapter<PrzyladekCanaveral> listAdapter = new ArrayAdapter<>(
                    this, android.R.layout.simple_list_item_1, PrzyladekCanaveral.poziomy);
            ListView listaPerel = (ListView) findViewById(R.id.level_list);
            listaPerel.setAdapter(listAdapter);

            // Obiekt nasłuchujący
            AdapterView.OnItemClickListener itemClickListener = new AdapterView.OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> listaPerel, View view, int position, long id) {
                    Intent intent = new Intent(Poziomy.this, OpisPoziomu.class);
                    intent.putExtra(OpisPoziomu.EXTRA_LEVELID, (int) id);
                    intent.putExtra(OpisPoziomu.EXTRA_CHOISE_BUILDING, (int) choiceBuilding);
                    startActivity(intent);
                }
            };
            listaPerel.setOnItemClickListener(itemClickListener);
        }
    }
}

Klasa OpisPoziomu

package pl.nynacode.lernfoecalculator;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class OpisPoziomu extends AppCompatActivity {

    public static final String EXTRA_LEVELID = "levelID";
    public static final String EXTRA_CHOISE_BUILDING = "choiceBuilding";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_opis_poziomu);

        // Pobranie wybranej perły
        int x = (Integer) getIntent().getExtras().get(EXTRA_CHOISE_BUILDING);
        Perly perly = Perly.perla[x];

        // Pobranie wywranego poziomu perły
        int levelID = (Integer) getIntent().getExtras().get(EXTRA_LEVELID);
        Arka arka = Arka.poziomy[levelID];
        PrzyladekCanaveral pc = PrzyladekCanaveral.poziomy[levelID];

        // Pobranie referencji do widoków textViev
        TextView level = (TextView) findViewById(R.id.level);
        TextView lv1 = (TextView) findViewById(R.id.lv1);
        TextView lv2 = (TextView) findViewById(R.id.lv2);
        TextView lv3 = (TextView) findViewById(R.id.lv3);
        TextView lv4 = (TextView) findViewById(R.id.lv4);
        TextView lv5 = (TextView) findViewById(R.id.lv5);

        // Wyświetlenie w zależności od wyboru rodzaju perły
        if(x == 0) {
            //Wczytujemy poziom perly
            level.setText(arka.getLevel());
            // Wczytujemy wkłady 1,9
            lv1.setText(arka.getLv1());
            lv2.setText(arka.getLv2());
            lv3.setText(arka.getLv3());
            lv4.setText(arka.getLv4());
            lv5.setText(arka.getLv5());
        }
        if(x == 1) {
            //Wczytujemy poziom perly
            level.setText(pc.getLevel());
            // Wczytujemy wkłady 1,9
            lv1.setText(pc.getLv1());
            lv2.setText(pc.getLv2());
            lv3.setText(pc.getLv3());
            lv4.setText(pc.getLv4());
            lv5.setText(pc.getLv5());
        }
    }
}

Klasa z niedziałającą tablicą

package pl.nynacode.lernfoecalculator;

public class Arka {

    private String level;
    private String lv1;
    private String lv2;
    private String lv3;
    private String lv4;
    private String lv5;

    // tablica
    public static final Arka[] poziomy = {
            new Arka("Level 1", "19", "10", "0", "0", "0"),
            new Arka("Level 2", "29", "19", "10", "0", "0"),
            new Arka("Level 3", "48", "29", "10", "0", "0"),
            new Arka("Level 4", "67", "68", "10", "0", "0"),
            new Arka("Level 5", "86", "48", "19", "0", "0"),
            new Arka("Level 6", "114", "57", "19", "10", "0"),
            new Arka("Level 7", "133", "67", "19", "10", "0"),
            new Arka("Level 08", "162", "86", "29", "10", "0"),
            new Arka("Level 09", "181", "95", "29", "10", "0"),
            new Arka("Level 10", "209", "105", "38", "10", "0"),
            new Arka("Level 11", "228", "114", "38", "10", "0"),
            new Arka("Level 12", "257", "133", "48", "10", "0"),
            new Arka("Level 13", "285", "143", "48", "10", "0"),
            new Arka("Level 14", "314", "162", "57", "19", "0"),
            new Arka("Level 15", "342", "171", "57", "19", "0"),
            new Arka("Level 16", "371", "190", "67", "19", "0"),
            new Arka("Level 17", "399", "200", "67", "19", "0"),
            new Arka("Level 18", "428", "219", "76", "19", "0"),
            new Arka("Level 19", "456", "228", "76", "19", "0"),
            new Arka("Level 20", "485", "247", "86", "19", "0")
    };

    // Konstruktor klasy
    private Arka(String level, String lv1, String lv2, String lv3, String lv4, String lv5) {
        this.level = level;
        this.lv1 = lv1;
        this.lv2 = lv2;
        this.lv3 = lv3;
        this.lv4 = lv4;
        this.lv5 = lv5;
    }

    // metody poierające informacje z prywatnych zmiennych
    public String getLevel() {
        return level;
    }

    public String getLv1() {
        return lv1;
    }

    public String getLv2() {
        return lv2;
    }

    public String getLv3() {
        return lv3;
    }

    public String getLv4() {
        return lv4;
    }

    public String getLv5() {
        return lv5;
    }

    public String toString() {
        return this.level;
    }
}

Pliki layoutów też mam podać ???? Nie chciałem wklejać całego kodu aplikacji z uwagi na to, że wzbudza to agresje u osób, które umieją już programować i zawsze naczytam się komentarzy, że jestem mało ambitny. Ale jeśli chcesz i dzięki temu pomożesz mi rozwiązać problem a ja posiądę dodatkową umiejętność to bardzo proszę kod app i dzięki za pomoc z góry. Nadmienię że jest to kod próbny, na którym ćwiczę różnego rozwiązania. Jak rozwiążę już wszystkie swoje problem i wymyślę w 100% co i jak ma działać w apce to wtedy zacznę na nowo pisać już czysty i bardziej przejrzysty kod.

edytowany 2x, ostatnio: matir85, 2019-06-29 23:54
Pokaż pozostałe 4 komentarze
Udało mi się poradzić z tablicą. Masz może jakąś podpowiedz dla mnie aby nie musiał korzystać z tak rażących ifów ??? - matir85 2019-07-02 16:24
np. skoro dla if(position == 0) robisz to samo co dla if(position == 1) to czemu by nie napisać jednego ifa if((position == 0) || (position == 1)) - au7h 2019-07-16 23:48
@au7h: każdy z podanych ifów wczytuje inną listę z innych klas. I jak na razie nie mam pojęcia jak zrobić aby wybór z 1 activity i 2 actyvity wczytywał odpowiednie dane w 3 activity - matir85 2019-07-17 14:24
Można zrobić klasę z metodami statycznymi i kontenerem na obiekty - au7h 2019-07-17 14:54
@au7h znajdę gdzieś do tego jakiś poradnik lub tutorial bo nie kumam jeszcze jak to zrobić ??? - matir85 2019-07-17 17:03

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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