Cum pot declara matrice dinamică String array în Java (Programare, Java, Array-Uri)

sivaraj a intrebat.

Folosesc String Array declara ca zoom z[]=new String[422];. Dar această matrice stochează valoarea din 0 la 32, , așa că am obținut null pointer exception după ce se face o buclă de valori 32.

Cum să rezolv această problemă în java?

Cum pot declara o matrice dinamică în java?

Comentarii

  • Dacă ar exista o modalitate de a descrie un cod, cum ar fi…. Nu știu, arătându-ne codul… –  > Por skaffman.
5 răspunsuri
Chadwick

Vrei să folosești un Set sau List implementare (de ex. HashSet, , TreeSet, , etc, sau ArrayList, , LinkedList, , etc..), deoarece Java nu dispune de array-uri cu dimensiuni dinamice.

List<String> zoom = new ArrayList<>();
zoom.add("String 1");
zoom.add("String 2");

for (String z : zoom) {
    System.err.println(z);
}

Editați:Iată o modalitate mai succintă de a inițializa lista cu un număr arbitrar de valori folosind varargs:

List<String> zoom = Arrays.asList("String 1", "String 2", "String n");

Comentarii

  • Notă, aceasta ar trebui să fie „ArrayList”, nu „List”; ceea ce mi-a cauzat câteva probleme. –  > Por EM-Creations.
  • Utilizarea List<String> este corectă. Pentru o discuție de ce, Joshua Bloch abordează utilizarea interfețelor în Effective Java – Elementul 52: Faceți referire la obiecte prin interfețele lor. –  > Por Chadwick.
  • Provoacă o eroare de compilare atunci când încerc să o folosesc, JDK 1.6 și 1.7. Nu acceptă avertismentul de argument, cred. –  > Por EM-Creations.
  • @EM-Creations Operatorul diamant nu a fost introdus până la versiunea 1.7. Pentru 1.6, specificați tipul și pentru constructorul ArrayList (new ArrayList<String>()). Folosit ca și corp al unei metode într-o clasă validă, fragmentul va fi compilat în 1.7 ca atare. –  > Por Chadwick.
  • @EM-Creations Importați java.util.List sau java.awt.List? Prima opțiune a funcționat pentru mine. –  > Por Keplerian.
mhshams

nu, nu există nicio modalitate de a face lungimea matricei dinamică în java. puteți folosi ArrayList sau alte List implementări în schimb.

Kelly S. French

Poate că sunteți în căutarea Vector. Capacitatea sa este extinsă automat dacă este necesar. Nu este cea mai bună alegere, dar se va descurca în situații simple. Merită să citiți despre ce este vorba. ArrayList în schimb.

Antonin Stefanutti

Array.newInstance(Class<?> componentType, int length) trebuie folosită pentru a crea un array cu lungime dinamică.

Array-urile multidimensionale pot fi create în mod similar cu ajutorul metodei Array.newInstance(Class<?> componentType, int... dimensions) metoda .

user698816

Ceea ce căutați este DefaultListModel – Dynamic String List Variable.

Iată o clasă întreagă care utilizează DefaultListModel ca și cum ar fi TStringList din Delphi. Diferența constă în faptul că puteți adăuga șiruri de caractere în listă fără limitare și aveți aceeași abilitate la obținerea unei singure intrări prin specificarea int. de intrare.

FileName: StringList.java

package YOUR_PACKAGE_GOES_HERE;

//This is the StringList Class by i2programmer
//You may delete these comments
//This code is offered freely at no requirements
//You may alter the code as you wish
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;

public class StringList {

    public static String OutputAsString(DefaultListModel list, int entry) {
        return GetEntry(list, entry);
    }

    public static Object OutputAsObject(DefaultListModel list, int entry) {
        return GetEntry(list, entry);
    }

    public static int OutputAsInteger(DefaultListModel list, int entry) {
        return Integer.parseInt(list.getElementAt(entry).toString());
    }

    public static double OutputAsDouble(DefaultListModel list, int entry) {
        return Double.parseDouble(list.getElementAt(entry).toString());
    }

    public static byte OutputAsByte(DefaultListModel list, int entry) {
        return Byte.parseByte(list.getElementAt(entry).toString());
    }

    public static char OutputAsCharacter(DefaultListModel list, int entry) {
        return list.getElementAt(entry).toString().charAt(0);
    }

    public static String GetEntry(DefaultListModel list, int entry) {
        String result = "";
        result = list.getElementAt(entry).toString();
        return result;
    }

    public static void AddEntry(DefaultListModel list, String entry) {
        list.addElement(entry);
    }

    public static void RemoveEntry(DefaultListModel list, int entry) {
        list.removeElementAt(entry);
    }

    public static DefaultListModel StrToList(String input, String delimiter) {
        DefaultListModel dlmtemp = new DefaultListModel();
        input = input.trim();
        delimiter = delimiter.trim();
        while (input.toLowerCase().contains(delimiter.toLowerCase())) {
            int index = input.toLowerCase().indexOf(delimiter.toLowerCase());
            dlmtemp.addElement(input.substring(0, index).trim());
            input = input.substring(index + delimiter.length(), input.length()).trim();
        }
        return dlmtemp;
    }

    public static String ListToStr(DefaultListModel list, String delimiter) {
        String result = "";
        for (int i = 0; i < list.size(); i++) {
            result = list.getElementAt(i).toString() + delimiter;
        }
        result = result.trim();
        return result;
    }

    public static String LoadFile(String inputfile) throws IOException {
        int len;
        char[] chr = new char[4096];
        final StringBuffer buffer = new StringBuffer();
        final FileReader reader = new FileReader(new File(inputfile));
        try {
            while ((len = reader.read(chr)) > 0) {
                buffer.append(chr, 0, len);
            }
        } finally {
            reader.close();
        }
        return buffer.toString();
    }

    public static void SaveFile(String outputfile, String outputstring) {
        try {
            FileWriter f0 = new FileWriter(new File(outputfile));
            f0.write(outputstring);
            f0.flush();
            f0.close();
        } catch (IOException ex) {
            Logger.getLogger(StringList.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

OutputAs sunt metode de ieșire a unei intrări sub formă de int, double etc… astfel încât să nu fie necesară conversia din string în cealaltă parte.

SaveFile & LoadFile servesc la salvarea și încărcarea șirurilor de caractere în și din fișiere.

StrToList & ListToStr au rolul de a plasa delimitatori între fiecare intrare.

ex. 1<>2<>3<>4<> dacă „<>” este delimitatorul și 1 2 3 & 4 sunt intrările.

AddEntry & GetEntry permit adăugarea și obținerea de șiruri de caractere în și din DefaultListModel.

RemoveEntry are rolul de a șterge un șir din DefaultListModel.

În acest caz, se utilizează DefaultListModel în loc de o matrice, astfel:

DefaultListModel list = new DefaultListModel();
//now that you have a list, you can run it through the above class methods.