属性文件和数组

时间:2017-05-14 20:05:34

标签: java arrays algorithm logic

下午好,我有问题。在读取属性文件并将其传递给数组时,看起来重复该数组,直到您完成读取文档为止,如图所示

Problem example from console

我应该从包含它们的txt文件中读取属性,并将艺术家的名称传递给大小为10的数组。

这里是程序使用的方法

/**
 * Carga la información inicial del karaoke.
 */
private void cargarKaraoke() {

    try {

        Properties datos = new Properties();

        FileInputStream in = new FileInputStream(RUTA_ARCHIVO);

        datos.load(in);

        in.close();

        int numArtistas = Integer.parseInt(datos.getProperty("total.artistas"));

        for(int i = 1; i <= numArtistas; i++) {

            String nombre = datos.getProperty("artista" + i + ".nombre");

            String categoria = datos.getProperty("artista" + i + ".categoria");

            String imagen = datos.getProperty("artista" + i + ".imagen");

            karaoke.agregarArtista(nombre, categoria, imagen);

            int numCanciones = Integer.parseInt(datos.getProperty("artista" 
                    + i + ".total.canciones"));

            for(int j = 1; j <= numCanciones; j++) {
                String cancion = datos.getProperty("artista" + i + ".cancion" 
                        + j + ".nombre");
                int duracion = Integer.parseInt(datos.getProperty("artista" 
                        + i + ".cancion" + j + ".duracion"));
                String letra = datos.getProperty("artista" + i + ".cancion" 
                        + j + ".letra");
                int dificultad = Integer.parseInt(datos.getProperty( "artista" 
                        + i + ".cancion" + j + ".dificultad"));
                String genero = datos.getProperty("artista" + i + ".cancion" 
                        + j + ".genero");
                String ruta = datos.getProperty("artista" + i + ".cancion" 
                        + j + ".ruta");

                karaoke.agregarCancion(nombre, cancion, duracion, letra, 
                        dificultad, genero, ruta);

            }

        }

    }

    catch(Exception e) {

        JOptionPane.showMessageDialog(this, "No fue posible cargar la información "
                + "inicial del karaoke " + e.getMessage(), "Error", 
                JOptionPane.ERROR_MESSAGE);

    }

}

    public void agregarArtista(String nombreArtista, String categoria, String imagen) {

    for (int i = 0; i < artistas.length; i++) {

        artistas[i] = new Artista(nombreArtista, categoria, imagen);

    }

    System.out.println(Arrays.toString(artistas));

}

    public int agregarCancion(String nombre, int duracion, String letra, int dificultad, 
        String genero, String ruta) {

    canciones.add(new Cancion(dificultad, duracion, genero, nombre, letra, ruta));

    return 1;

}

但在测试时,图像的结果会出现。

我个人认为问题在于添加艺术家的方法,但我无法确定问题。

有没有人知道发生了什么?

1 个答案:

答案 0 :(得分:0)

您可以将所有Artista对象保存在列表List<Artista> artistas = new ArrayList<Artista>()中,并更改方法agregarArtista以使用艺术家数据填充列表:


public void agregarArtista(String nombreArtista, String categoria, String imagen) {
    artistas.add(new Artista(nombreArtista, categoria, imagen));
    System.out.println(artistas);

}

如果您只想要前10名艺术家,那么您可以更改方法,如下所示:


    public void agregarArtista(String nombreArtista, String categoria, String imagen) {
        if (artistas.size() < 10) {
            artistas.add(new Artista(nombreArtista, categoria, imagen));
        }
        System.out.println(artistas);
    }

如果结果应该在数组中,那么您可以将List转换为数组,如下所示:
Artista[] artistasArray = artistas.toArray(new Artista[0]);