2010-08-30 20 views
20

estoy usando Array cadena declarar como zoom z[]=new String[422];. Pero esta matriz tiendas valoran de 0 a 32, así que me dieron después de null pointer exception bucle valor 32.¿Cómo puedo declarar array Alfa dinámica en Java

¿Cómo resolver este problema en Java?

¿Cómo puedo declarar una matriz dinámica en Java?

+7

Si hubiera una forma de describir algún código, como .... No sé, mostrándonos el código ... – skaffman

Respuesta

39

que desea utilizar una aplicación o SetList (por ejemplo HashSet, TreeSet, etc, o ArrayList, LinkedList, etc ..), ya que Java no tiene matrices de tamaño dinámicamente.

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

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

Editar: Aquí está una manera más sucinta para inicializar su lista con un número arbitrario de valores utilizando varargs:

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

Nota, esto debería ser "ArrayList", no "List"; lo cual me causó algunos problemas. –

+0

Usar 'List ' es correcto. Para la discusión de por qué, Joshua Bloch aborda el uso de interfaces en [Java efectivo - Ítem 52: Refiera a los objetos por sus interfaces] (http://jtechies.blogspot.com/2012/07/item-52-refer-to-objects -by-their.html). – Chadwick

+0

Causa un error de compilación cuando intento usarlo, JDK 1.6 y 1.7. No toma advertencia de argumento, yo sí creo. –

5

no, no hay manera de hacer que la longitud matriz dinámica en Java. puede utilizar ArrayList u otras implementaciones List en su lugar.

3

Quizás esté interesado para Vector. Su capacidad se expande automáticamente si es necesario. No es la mejor opción, pero lo hará en situaciones simples. Vale la pena su tiempo para leer en ArrayList en su lugar.

0

lo que busca es la DefaultListModel - Variable lista de cadenas dinámica.

Aquí hay una clase completa que usa DefaultListModel como si fuera la TStringList de Delphi. La diferencia es que puede agregar Cadenas a la lista sin limitaciones y tiene la misma capacidad para obtener una sola entrada especificando la entrada int.

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 métodos son para dar salida a una entrada como int, double, etc ... para que usted no tiene que convertir de cadena en el otro lado.

SaveFile & LoadFile son para guardar y cadenas de carga desde y hacia archivos.

StrToList & ListToStr son para colocar delimitadores entre cada entrada.

ex. 1 <> 2 <> 3 <> 4 <> if "<>" es el delimitador y 1 2 3 & 4 son las entradas.

AddEntry & GetEntry son para agregar y obtener cadenas desde y hacia el DefaultListModel.

RemoveEntry es eliminar una cadena del DefaultListModel.

utiliza el DefaultListModel lugar de una matriz aquí de esta manera:

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