Foros del Web » Programación para mayores de 30 ;) » Java »

Ayuda para resolver un ejercicio de arrays

Estas en el tema de Ayuda para resolver un ejercicio de arrays en el foro de Java en Foros del Web. Hola, Tango que realizar un ejercicio en donde se debe crear y ordernar alfabeticamente un array desde un archivo de texto. He estado intentando solucionarlo ...
  #1 (permalink)  
Antiguo 04/01/2011, 13:33
 
Fecha de Ingreso: noviembre-2002
Ubicación: Suecia
Mensajes: 253
Antigüedad: 21 años, 4 meses
Puntos: 2
Ayuda para resolver un ejercicio de arrays

Hola,

Tango que realizar un ejercicio en donde se debe crear y ordernar alfabeticamente un array desde un archivo de texto.

He estado intentando solucionarlo hace bastantes dias pero no logro entender como juntar las piezas del puzle.

Para empezar les describo de que se trata el ejercicio: Tengo que crear una clase que lea desde un archivo de texto informacion de unos CD. El archivo esta compuesto de 4 lineas (cada una representa un cd) y se ve asi (se llama "lista2.txt"):

Cita:
Elvis_Presley Jailhouse_Rock Rock RCA 1991 17 72,23
Massive_Attack Protection
Massive_attack Blue_Lines
Test_Iscicles Circle_Square_Triangle Ska NoLabel 1995 2 9,12
Ahora bien, en mi clase he logrado leer el archivo y crear los arrays de esta manera (la clase se llama Lab4):

Código PHP:
import java.io.*;

public class 
Lab4 {

    public static 
void main(String args[]) {

        
String myArray[] = new String[4];

        try {
            
File myFile = new File("lista2.txt");
            
FileReader fileReader = new FileReader(myFile);

            
BufferedReader lineReader = new BufferedReader(fileReader);

            for (
int line 0line myArray.lengthline++) {
                
myArray[line] = lineReader.readLine();
                
System.out.printf("%s\n"myArray[line]);
            }

            
lineReader.close();
            
fileReader.close();

        } catch (
IOException ioe) {
            
System.out.println("Fel i inläsning ");
        }

    }

Una parte del ejercicio es que hay que utilizar una segunda clase llamada "CD", que fue utilizada en un ejercicio anterior para ordenar alfabeticamente los arrays. Esta clase es asi:

Código PHP:
public class CD {
    private 
String artisttitlegenrerecordLabelnothing;
    private 
double playTime;
    private 
int releaseYearnumberSongs;

    public 
CD() {
        
    }


    
//Constructor for the cd with brief information
    
public CD (String artistString titleint releaseYear) {
        
this.artist artist;
        
this.title title;
        
this.releaseYear releaseYear;
    }


    
//Constructor for the cd with full information
    
public CD (String artistString titleString genreString skivbolagint releaseYearint numberSongsdouble playTime) {
        
this(artisttitlereleaseYear);
        
this.genre genre;
        
this.recordLabel skivbolag;
        
this.releaseYear releaseYear;
        
this.numberSongs numberSongs;
        
this.playTime playTime;
    }




   
//Method to sort the arrays

    
public void sort(CD[] skivor) {
        
// sort the arrays from A to Ö.
    
}




    
//Setting and getting the information from Labb2.java class

    
public void setEmpty(String empty) {
        
nothing = empty;
    }

    public 
String getEmpty() {
        return 
nothing;
    }

    public 
void setArtist(String name) {
        
artist name;
    }

    public 
String getArtist() {
        return 
artist;
    }

    public 
void setTitle(String titleName) {
        
title titleName;
    }

    public 
String getTitle() {
        return 
title;
    }

    public 
void setGenre(String genreName) {
        
genre genreName;
    }

    public 
String getGenre() {
        return 
genre;
    }

    public 
void setSkivbolag(String recordLabelName) {
        
recordLabel recordLabelName;
    }

    public 
String getSkivbolag() {
        return 
recordLabel;
    }

    public 
void setReleaseYear(int releaseDate) {
        
releaseYear releaseDate;
    }

    public 
int getReleaseYear() {
        return 
releaseYear;
    }

    public 
void setNumberSongs(int songsNumber) {
        
numberSongs songsNumber;
    }

    public 
int getNumberSongs() {
        return 
numberSongs;
    }

    public 
void setPlayTime(double cdPlayTime) {
        
playTime cdPlayTime;
    }

    public 
double getPlayTime() {
        return 
playTime;
    }


    
//Create the printBrief metod which will print some information.
    
public void printBrief() {
        
System.out.println("Artist      : " getArtist() + "\nAlbums namn : " getTitle() + "\nUtgivningsår: " getReleaseYear());
    }

    
//Create the printFull metod which will print all the information.
    
public void printFull() {
        
System.out.println("Artist      : " getArtist() + "\nAlbums namn : " getTitle() + "\nGenre       : " getGenre() + "\nSkivbolag   : " getSkivbolag() + "\nUtgivningsår: " +
                
getReleaseYear() + "\nAntal låtar : " getNumberSongs() + "\nSpeltid     : " getPlayTime() + " minuter.");
    }

En esta clase lo unico que se deberia seguir desarrollando es el motodo "sort".

Ahora comienzan mis problemas:

1- En la clase Lab4 si se fijan estoy iniciando el array con 4 elementos, pero podrian ser mas o menos dependiendo de la cantidad de lineas que tenga el archivo de texto. Como puedo controlar eso si de la siguiente forma puedo obtener el numero de lineas del archivo de texto:

Código PHP:
String textLines;
             
int counter 0;
            while((
textLines lineReader.readLine()) != null) {
               
                
counter++;
                
            }
            
System.out.println(counter); 
2- Como lo hago para enviar la informacion necesaria al metodo "sort" en la clase CD para ordenar el array alfabeticamente desde la clase "Lab4"?
Segun lo que leo en la explicacion del ejercicio se debe crear un objeto de la clase CD de la siguiente manera:

CD createCD(String line) // crea un cd desde una linea del array
CD[] readCDsFromFile(String filname) // lee todos los cd

Pero por mas que leo estas lineas no entiendo que debo hacer.

3- y por ultimo la lista ordenada de cd la tengo que escribir en un archivo de texto nuevo.

Cualquier tip o ejemplo o algo se los agradecere.

Por ultimo, hay un par de restricciones: no puedo usar Array.sort o Collections.sort

//Americo

Última edición por Jarkaos; 04/01/2011 a las 13:39
  #2 (permalink)  
Antiguo 06/01/2011, 09:47
Avatar de jcMouse  
Fecha de Ingreso: noviembre-2009
Ubicación: Bolivia
Mensajes: 116
Antigüedad: 14 años, 4 meses
Puntos: 9
Respuesta: Ayuda para resolver un ejercicio de arrays



de entrada te digo, un array en java no es dinamico, hasta donde me acuerdo , si quieres utilizar tamaños distintos en un array, debes crear el objeto de nuevo, para leer cualquier cantidad de lineas de un TXT y pasarlo a un array String[] la siguiente clase te ayudara

se llama cosa.java (yo y mis nombres )

Código PHP:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Vector;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 */
public class cosa {
    private 
String[] myArray;
    private 
Vector v = new Vector(4,1);
    
//para leer
    
private File archivo null;
    private 
FileReader fr null;
    private 
BufferedReader br null;

    public 
cosa(){
        
System.out.println("cosa de locos");
    }
    
    private 
void leer(){        
        try {         
            
archivo = new File ("lista2.txt");            
            
fr = new FileReader (archivo);
            
br = new BufferedReader(fr);
            
// Lectura del fichero linea por linea
            
String linea;
            while((
linea=br.readLine())!=null)                            
               
v.addElement(linea);
            
myArray = new String[v.size()];
            
myArray =  (String[]) v.toArray(myArray);
        }
        catch(
Exception e){
             
e.printStackTrace();
      }            
    }
    
    public 
String[] getMyArray(){
        
leer();
        return 
this.myArray;
    }

asi puedes leer cualquier archivo de texto en linea, por ejemplo:

Cita:
Elvis_Presley Jailhouse_Rock Rock RCA 1991 17 72,23
Massive_Attack Protection
Massive_attack Blue_Lines
Test_Iscicles Circle_Square_Triangle Ska NoLabel 1995 2 9,12
te lo dice jc mouse Bolivia Av. Siempre Viva 69
y utilizando la clase:

Código PHP:
public class Main {

    public static 
void main(String[] args) {               
        
cosa c = new cosa();        
        
String[] miArray c.getMyArray();
         
//solo para mostrar en consola que si lee
        
for(int i=0;i<miArray.length;i++){
            
System.out.println(miArray[i]);
        }
    }
    

y listo

se malo
__________________
Problem?
Estoy aquí
Foro Code Army
  #3 (permalink)  
Antiguo 06/01/2011, 12:33
 
Fecha de Ingreso: noviembre-2002
Ubicación: Suecia
Mensajes: 253
Antigüedad: 21 años, 4 meses
Puntos: 2
Respuesta: Ayuda para resolver un ejercicio de arrays

Gracias por la respuesta.
He creado la clase Lab4 nuevamente, ahora es de la siguiente manera:

Código:
import java.io.*;
import java.util.Scanner;

public class Labb4 {

    public static void main(String args[]) {
        
        File file = new File("skivor.txt");
        try {

            Scanner lineReader = new Scanner(file);
            int arrayNumber = 0;
            while (lineReader.hasNextLine()) {

                // Crea un array de tipo CD. arrayNumber determina el tamano del array
                CD[] myArray = new CD[arrayNumber];
                
                String textLine = lineReader.nextLine();
                
                Scanner row = new Scanner(textLine);

               
               

                // Crear el objeto CD por cada arreglo (cada linea en el archivo de texto)
                CD cd = new CD();
                cd.setArtist(row.next());
                cd.setTitle(row.next());
                

                // Llama al metodo printArray para mostrar los arrays
                cd.printArray();

                arrayNumber++;
            }

            //Cierra el archivo de texto
            lineReader.close();

        } catch (IOException ioe) {
            System.out.println("Fel inläsning");
        }

    } // end Main
}
el metodo printArray es asi:

Código:
public void printArray() {
        System.out.println(getArtist() + " " + getTitle() + "\n");
    }
este metodo se encuentra en la clase CD.

Lo que necesito hacer ahora es ordenar alfabeticamente los arreglos y para eso debo ocupar el metodo "sort" de la clase CD que es este:

Código:
public void sort(CD[] skivor) {
        /*
            sorting goes here
         */
    }
lo que no se es como "traspaso" los arreglos a este metodo para aplicar el algoritmo "bubble sort" y guardar los arreglos ya ordenados en un archivo de texto.

Alguna idea que me pueda ayudar?

/Americo

Última edición por Jarkaos; 06/01/2011 a las 12:49

Etiquetas: arrays
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:09.