Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    problemi con la programmazione java!!!

    ciao ragazzi è da due giorni ke ho un piccolo problema nell'usare gli array di stringhe, in pratica io ho una collezione di cd e devo fare una ricercha inserendo o il titolo o l'anno o l'artista ,oppure posso inserire anno e artista o anno e titolo.. nn capisco perchè utilizzando gli if annidati mi stampino sempre tutto ..... come posso fare aiutoooooo?????'

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    E che aiuto ti si può dare se non sappiamo nemmeno cos'hai fatto?
    Posta almeno un po' di codice, la parte rilevante.
    E prendi visione del Regolamento interno: titolo della discussione, posting del codice e spiegazione degli errori ottenuti.

    I titoli delle discussioni, in particolare, devono dare un'idea del contenuto della discussione. Siccome qui si parla di Java, il 100% delle problematiche qui trattate parla di problemi con la programmazione Java, altrimenti sarebbero fuori luogo... quindi, il titolo è assolutamente privo di informazioni.

    Correggo io il titolo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3

    ECCO IL CODICE

    Codice PHP:
    for(int i=0;icd2.size();i++)
    String titolo cd[i].gettitolo(); 
    Pattern d Pattern.compiletitolo) ;
     
    String artista cd[i].getartista();
     
    Pattern c Pattern.compileartista) ;
     
    String anno =cd[i].getanno();
     
    Pattern fPattern.compile(anno);
    if((
    c.matches(c.pattern(), cercocdmusica )||d.matches(d.pattern(),cercocdmusica)) && f.matches(f.pattern(), cercocdmusicaanno)) 
    System.out.println(cd2.get(i) +"\n");
     if (
    i==0){ for(int g=0g<branii0.size();g++)
     { 
    System.out.println(branii0.get(g)+"\n"); ................}} 
    else if(
    c.matches(c.pattern(), cercocdmusica) ) 
    System.out.println(cd2.get(i)+"\n");
     if(
    i==0){ for(int g=0g<branii0.size(); g++)
    System.out.println(branii0.get(g)+"\n"); ..........}}
     else if(
    f.matches(f.pattern(), cercocdmusicaanno) )
     { 
    System.out.println(cd2.get(i)+"\n");
     if(
    i==0){ for(int g=0g<branii0.size(); g++){
     
    System.out.println(branii0.get(g)+"\n");............... }} 
     } 

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Da una rapida occhiata mi pare evidente che tu stia invertendo i due termini di ricerca.

    Pattern.matches(String s1, String s2) significa questo:

    s1 : espressione regolare che indica "cosa cercare"
    s2 : stringa da verificare che corrisponda alla regex

    Quindi, prendendo per esempio la ricerca sul titolo del CD, il titolo del CD deve essere il secondo argomento (mentre tu lo stai mettendo come primo, passandolo prima ad un Pattern per poi riottenerlo tramite il metodo pattern(), perchè? Boh.), mentre al primo argomento deve starci l'espressione regolare relativa alla tua ricerca.

    Dovresti rivedere un po' tutto il codice, perchè hai invertito ovunque i termini.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    grazie per la correzione ma non è questo il problema ...il problema è che se io ho un array contente i vari cd (string autore, string titolo, string anno ) e ho un cd(vasco,live,1993)
    e un cd(mina, parole,1993) perche se cerco vasco 1993 come risposta ottengo la stampa dei due cd invece che di quello solo???

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Boh... a me pare piuttosto arzigogolato come codice (poi un giorno ci farai sapere perchè prima dichiari una variabile "d", poi una "c" e poi una "f", così, giusto per renderlo un po' più incasinato e meno manutenibile, nemmeno l'ordine alfabetico). Sarebbe più facile se almeno i nomi delle variabili fossero un po' più esplicativi.

    Ho riscritto il tuo codice in modo più indentato e aggiungendo le parentesi graffe mancanti (alla fine ne mancano 2 o 3) e vorrei avere alcune delucidazioni:

    codice:
    for(int i=0;i< cd2.size();i++) {
       String titolo = cd[i].gettitolo(); 
       Pattern d = Pattern.compile( titolo) ;
       String artista = cd[i].getartista();
       Pattern c = Pattern.compile( artista) ;
       String anno =cd[i].getanno();
       Pattern f= Pattern.compile(anno);
       if((c.matches(c.pattern(), cercocdmusica )||d.matches(d.pattern(),cercocdmusica)) && f.matches(f.pattern(), cercocdmusicaanno)) {
          System.out.println(cd2.get(i) +"\n");
          if (i==0) {
             for(int g=0; g<branii0.size();g++) {
                System.out.println(branii0.get(g)+"\n");
                ................
             }
          } else {
             if(c.matches(c.pattern(), cercocdmusica) ) {
                System.out.println(cd2.get(i)+"\n");
                if(i==0) {
                   for(int g=0; g<branii0.size(); g++) {
                      System.out.println(branii0.get(g)+"\n");
                      ..........
                   }
                } else {
                   if( f.matches(f.pattern(), cercocdmusicaanno) ) {
                      System.out.println(cd2.get(i)+"\n");
                      if(i==0) {
                         for(int g=0; g<branii0.size(); g++) {
                            System.out.println(branii0.get(g)+"\n");
                            ...............
                         }
                      } 
                   }
                }
             }
          }
       }
    }
    1) Che cosa sono "cd" e "cd2"?
    2) Perchè cicli su tutto il contenuto di una lista/vettore chiamato "cd2", ma i Pattern li costruisci sulla base dei valori contenuti in un array "cd"?
    3) C'è un terzo misterioso oggetto "branii0" che sembrerebbe essere una lista/vettore di non si sa cosa che ogni volta viene scorso tutto. Che è?
    4) A cosa dovrebbero servire i match() successivi (quelli dopo la prima if)?

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    allora cd e un ARRAY CD2 è UN ARRAYLIST(DOVE CARICO IL MIO ARRAY CD PER FARLO DIVENTARE DINAMICO ), CICLO SU CD2 PERCHè è UN ARRAYLIST KE CONTIENE TUTTI I MIEI CD...E I BRANII0 SN TUTTI I BRANI CHE CONTENGO UN CD...
    Codice PHP:
    Cdmusica cd[]= new Cdmusica[5];
     
    cd[0]= new Cdmusica"The Fame monster","VV""sony""1993",1); 
    cd[1]= new Cdmusica"Track 2 inediti","VV""REI","1993",2); 
    cd[2]= new Cdmusica("Fuori Come Va","Luciano Ligabue""EMI","1993",5);
     
    cd[3]= new Cdmusica("Laura Live Tour","Laura Pausini""UNIVERSAL""1989",6);
     
    cd[4]= new Cdmusica("Crazy love""Michael bubl�","VIRGIN""2006",3); 
    ArrayList<Objectcd2= new ArrayList<Object>();
     
    cd2.add(cd[0]); 
    cd2.add(cd[1]);
     
    cd2.add(cd[2]);
     
    cd2.add(cd[3]); 
    cd2.add(cd[4]); 
    GRAZIE MILLE PER L'AIUTO E LA PAZIENZA

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Ridondante quanto inutile.
    Elimina l'array, non ti serve a nulla.
    Usa solo l'ArrayList, ma tipizzalo correttamente, non come Object (contiene oggetti Cdmusica? Sarà un ArrayList<Cdmusica>).
    Nel ciclo for, invece di creare i Pattern prendendo i valori dall'array (che non avrai più), prendili dall'arraylist.

    Ho provato il tuo codice, riempiendo l'arraylist con due CD, quello di Vasco e quello di Mina.
    Ho fatto la ricerca con "Vasco", "1993" e mi ha tirato fuori uno ed un solo valore, quindi, per quanto arzigogolato, quel codice funziona.

    codice:
    ArrayList<Cdmusica> cd2= new ArrayList<Cdmusica>(); 
    cd2.add( new Cdmusica( "The Fame monster","VV", "sony", "1993",1) );
    cd2.add( new Cdmusica( "Track 2 inediti","VV", "REI","1993",2) );
    ...
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    ho copiato il codice di prima ma adesso se inserisco solo il nome dell'artista non mi da niente...sto impazzendo

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Beh... l'hai scritta tu la condizione del primo if:

    codice:
    if((c.matches(c.pattern(), cercocdmusica )||d.matches(d.pattern(),cercocdmusica)) &&
       f.matches(f.pattern(), cercocdmusicaanno)) {
    Significa che, per essere soddisfatta, deve trovare un match (sull'autore o sul titolo) e sull'anno.

    Se non trova un match sull'anno, l'if fallisce.
    Se non trova un match sul titolo e nemmeno sull'autore, l'if fallisce.

    Qui, devi essere tu a sapere cosa vuoi ottenere e, di conseguenza, scrivere la condizione corretta.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.