|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2009
Messaggi: 80
|
[JAVA] gestire un array
ciao ragazzi
allora, ho un array di stringhe fatto in questo modo: [0] INIZIO [1] dato x1 [2] dato x2 [n] dati xn [n+1] INIZIO [n+2] dato y1 [n+3] dato y2 [m] dati ym in pratica nel vettore ci sono tante sezioni, ogni sezione è separata dall'altra dalla stringa INIZIO, quindi quando troviamo questa stringa sappiamo che da là in poi ci sono dati da prendere, fino alla prossima stringa INIZIO. In ognuna di questa sezione ci sono sempre 2 stringhe obbligatorie, invece le prossime n sono variabili, ovvero potrebbe essere 1 o anche 100. Come posso fare per prendere i dati della prima sezione, metterli in un vettore X, fermarmi al prossimo INIZIO, prendere i dati successivi e metterli in un vettore Y, e così via? quello che non riesco a fare è lo pseudocodice, lo realizzo in Java ma comunque mi basta capire come fare l'algoritmo (non è importante il fatto che devo mettere i dati in un vettore, mi interessa il come riuscire a fermarmi quando la prossima stringa è INIZIO, e ricominciare) |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2009
Messaggi: 366
|
puoi spiegare il problema in maniera più comprensibile ciao
__________________
visitate http://www.forumsenzacontro.altervista.org |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Sep 2009
Messaggi: 80
|
provo a essere meno generico..faccio un esempio che però funzionerebbe solo in Java:
un file del tipo STUDENTE nome cognome esame1 esame2 .... esameN STUDENTE nome cognome esame1 esame2 .... esameM STUDENTE nome e così via.. Tutto questo è in un vettore ora vorrei assegnare le stringhe ad un oggetto studente per esempio (o metterle in un vettore per ogni studente e passare il vettore all'oggetto studente), e l'unico modo di assegnarle al giusto studente, è riconoscere i delimitatori STUDENTE. come faccio a fare queste operazioni? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Un esempio:
Codice:
class Studente
{
String nome;
String cognome;
List<String> esami;
public Studente(String nome, String cognome, List<String> esami) {
this.nome = nome;
this.cognome = cognome;
this.esami = esami;
}
...
}
Codice:
List<Studente> exctractStudenti(Vector data)
{
List<Studente> studenti = new ArrayList<Studente>();
boolean flag = false;
int index = 0, fromIndex = 0, toIndex = 0;
for (String element : data) {
if ("STUDENTE".equals(element)) {
if (flag) {
flag = false;
toIndex = index;
Studente s = readStudente(data.subList(fromIndex, toIndex));
studenti.add(s);
}
else {
flag = true;
fromIndex = index+1;
}
}
index++;
}
return studenti;
}
...
Studente readStudente(List<String> data)
{
String nome = data[0];
String cognome = data[1];
List<String> esami = new List<String>(data.size()-2);
for (int i=2; i<data.size(); i++)
esami.add(data[i]);
return new Studente(nome, cognome, esami);
}
@EDIT: Questo premesso che l'input sia il vettore di stringhe e non il file o uno stream dati. Perchè in tal caso sarebbe molto più conveniente appoggiarsi alla classe Scanner, usando "STUDENTE" come delimiter.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 14-06-2010 alle 17:38. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2009
Messaggi: 366
|
ciao prova se così va bene
Codice:
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.LinkedList;
public class Studente {
private String nome;
private String cognome;
private LinkedList<String> esami=new LinkedList<String>();
public Studente()
{
}
public Studente(String nome,String cognome)
{
this.nome=nome;
this.cognome=cognome;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCognome() {
return cognome;
}
public void setCognome(String cognome) {
this.cognome = cognome;
}
public LinkedList<String> getEsami() {
return esami;
}
public void setEsami(LinkedList<String> esami) {
this.esami = esami;
}
public void stampaStudenti()
{
System.out.println("STUDENTE");
System.out.println("Nome"+nome);
System.out.println("Cognome"+cognome);
for(int i=0;i<esami.size();i++)
System.out.println("esame "+i+" "+esami.get(i));
}
public static void main(String[] args)
{
LinkedList<Studente> studenti=new LinkedList<Studente>();
Studente s=new Studente();
int index=0;
// definiamo il percorso al file da leggere
File doc=new File("C:/stud.txt");
URL path=null;
// creaiamo un blocco try-catch per intercettare le eccezioni
try
{
// mostriamo il percorso al file
path=doc.toURL();
System.out.println("Il doc si trova nel percorso" + path);
//mostriamo il nome del file
doc=new File(path.getFile());
System.out.println("Nome del file " + doc);
String line=new String();
// apriamo lo stream di input...
InputStream is=path.openStream();
BufferedReader br=new BufferedReader(new InputStreamReader(is));
// ...e avviamo la lettura del file con un ciclo
line=br.readLine();
while(line!=null)
{
System.out.println(line);
s.setNome(br.readLine());
s.setCognome(br.readLine());
line=br.readLine();
while(!line.equals("STUDENTE"))
{
s.esami.add(line);
line=br.readLine();
//controllo se è la fine del file
if(line==null)
break;
}
}
studenti.add(s);
s.esami.clear();//CANCELLO GLI ESAMI RELATIVI A QUEL STUDENTE
}
// intercettiamo eventuali eccezioni
catch (MalformedURLException e)
{
System.out.println("Attenzione:" + e);
}
catch (IOException e)
{
System.out.println(e.getMessage());
}
}
}
__________________
visitate http://www.forumsenzacontro.altervista.org |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:47.



















