Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di ty7
    Registrato dal
    Jun 2004
    Messaggi
    42

    [JAVA][jsp e jdbc] Classifica

    Ciao a tutti!
    Sto scrivendo una pagina jsp che mi "dovrebbe" mostrare la classifica di un campionato di calcio, sfruttando i risultati delle partite raccolti in un database.
    Non ho grande dimestichezza con gli array e secondo me sto facendo del gran casino e mi sto complicando la vita da solo. :master:
    Per il momento mi stavo accontentando di ordinare le squadre in base ai risultati della prima giornata ed il codice sarebbe questo:

    codice:
    String query = "SELECT squadra1, squadra2, gol1, gol2  FROM risultati WHERE Categoria LIKE 'Allievi' AND Partita LIKE 'Campionato' ORDER BY squadra1";
    
    int i=0, j=0, k=0;
    String[][] sq = new String[50][2];
    
    ResultSet r = s.executeQuery(query);
    while(r.next()){
    
      String s1 = r.getString("squadra1").toUpperCase();
      String s2 = r.getString("squadra2").toUpperCase();
      String gol1 = r.getString("gol1");
      String gol2 = r.getString("gol2");
    
      sq[i][0] = s1;
      sq[i+1][0] = s2;
    
      int p1 = 0;
      int p2 = 0;
    
      int g1 = Integer.parseInt(gol1);
      int g2 = Integer.parseInt(gol2);
    
      if (g1>g2) {p1=p1+3;}
    
      if (g1<g2) {p2=p2+3;}
    
      if (g1==g2) {
        p1=p1+1;
        p2=p2+1;
        }
    
       sq[i][1] = Integer.toString(p1);
       sq[i+1][1] = Integer.toString(p2);
    
       i=i+2;
    
       }
    
       s.close();
    
       for(j=0;j<10;j++){
         for(k=0;k<10;k++){
    
           int gg1=0, gg2=0;       
           gg1 = Integer.parseInt(sq[j][1]);
           gg2 = Integer.parseInt(sq[k][1]);
    
           if (gg1>gg2) {
             out.print(sq[j][0]);
             out.print(sq[j][1]);
             j++;
    %>            
    
    
    <%
           }
          }
          }
    
         }
         catch (Exception e)
         {out.print(e);
        }
    L'errore in questo codice è java.lang.NumberFormatException: null.
    Ringrazio anticipatamente chiunque mi aiuti ad eliminare l'errore o mi insegni un modo migliore per raggiungere il mio obiettivo.
    Ciao

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    NumberFormatException è sicuramente quando chiami Integer.parseInt che contiene o una stringa che non rappresenta un numero valido oppure un valore nullo.

    Io comunque al posto tuo invece di salvare quei valori in array bidimensionali mi creerei una bella classe squadra che mantiene tutte le info che ti servono come nome, punti etcetc. Penso che ti semplificherebbe la vita

  3. #3
    Utente di HTML.it L'avatar di ty7
    Registrato dal
    Jun 2004
    Messaggi
    42
    Ok ho trovato il tempo per fare (o meglio provare a fare...) ciò che mi hai consigliato.
    Ho creato la seguente classe:

    codice:
    class Squadra {
    
       public Squadra(String ns) {
       ns=this.ns;
       pt=0;
       pg=0;
       v=0;
       n=0;
       p=0;
       gf=0;
       gs=0;
       }
    
       public void vittoria () { 
       pt=pt+3;
       pg++;
       v++;
       }
    
       public void pareggio () { 
       pt=pt+1;
       pg++;
       n++;
       }
    
       public void sconfitta () { 
       pg++;
       p++;
       }
    
       public String squadra (){ 
       return ns;
       }
    
       public int punti () { 
       return pt;
       }
    
       public int partite () { 
       return pg;
       }
    
       public int vittorie () { 
       return v;
       }
    
       public int pareggi () { 
       return n;
       }
    
       public int sconfitte () { 
       return p;
       }
    
       public String ns;          // ns=nome_squadra
       public int pt;             // pt=punti
       public int pg;             // pg=partite_giocate
       public int v;              // v=vinte
       public int n;              // n=pareggiate
       public int p;              // p=perse
       public int gf;             // gf=gol_fatti
       public int gs;             // gs=gol_subiti
    
    }
    Poi ho implementato il codice che avevo scritto in precedenza in questo modo:

    codice:
     String dbUrl="jdbc:mysql://localhost:3306/database";
    String user="***";
    String password="***";
    try {
       Class.forName("org.gjt.mm.mysql.Driver");
       Connection c = DriverManager.getConnection(dbUrl,user,password);
       Statement s = c.createStatement();
    
       String query = "SELECT squadra1, squadra2, gol1, gol2  FROM risultati WHERE Categoria LIKE 'Allievi' AND Partita LIKE 'Campionato' ORDER BY squadra1";
    
       ResultSet r = s.executeQuery(query);
       while(r.next()) {
          String squadra1 = r.getString("squadra1").toUpperCase();
          String squadra2 = r.getString("squadra2").toUpperCase();
    
          int gol1 = Integer.parseInt(r.getString("gol1"));
          int gol2 = Integer.parseInt(r.getString("gol2"));
    
          Squadra s1 = new Squadra(squadra1);
          Squadra s2 = new Squadra(squadra2);
    
          if (gol1>gol2) {
             s1.vittoria();
             s2.sconfitta();
          }
    
          if (gol1<gol2) {
             s1.sconfitta();
             s2.vittoria();
          }
    
          if (gol1==gol2) {
             s1.pareggio();
             s2.pareggio();
          }

    Il problema adesso è che dovrei poter assegnare ad ogni oggetto Squadra un nome univoco in modo da poter mettere insieme tutte le classi con uguale nome_squadra. Si possono fare array di classi?
    Boh, sto facendo un gran casino!

    Lascia perdere le mie domande e dimmi quello che faresti tu che è meglio...
    Grazie mille

  4. #4
    Un piccolo errore nel costruttore:

    ns=this.ns; NO
    this.ns = ns; SI
    ciao
    Will Live On The Web...

  5. #5
    Utente di HTML.it L'avatar di ty7
    Registrato dal
    Jun 2004
    Messaggi
    42
    Dopo vari tentativi e modifiche (grazie ai vostri consigli...) sono giunto a questo:

    codice:
    <%class Squadra {
    
            public Squadra(String ns) {
              this.ns=ns;
              pt=0;
              pg=0;
              v=0;
              n=0;
              p=0;
              gf=0;
              gs=0;
            }
    
            public void vittoria ()
            { 
              pt=pt+3;
              pg++;
              v++;
            }
    
            public void pareggio ()
            { 
              pt=pt+1;
              pg++;
              n++;
            }
    
            public void sconfitta ()
            { 
              pg++;
              p++;
            }
    
            public String squadra ()
            { 
              return ns;
            }
    
            public int punti ()
            { 
              return pt;
            }
    
            public int partite ()
            { 
              return pg;
            }
    
            public int vittorie ()
            { 
              return v;
            }
    
            public int pareggi ()
            { 
              return n;
            }
    
            public int sconfitte ()
            { 
              return p;
            }
    
            public String ns;          // ns=nome_squadra
            public int pt;                 // pt=punti
            public int pg;                // pg=partite_giocate
            public int v;                  // v=vinte
            public int n;                  // n=pareggiate
            public int p;                  // p=perse
            public int gf;                 // gf=gol_fatti
            public int gs;                // gs=gol_subiti
    
          }
    
    
         int i = 0;
         int i2 = 0;
         int j = 0;
         int ii = 0;
         String[] k = new String[20];
         Squadra[] sq = new Squadra[20];
    
    
        String dbUrl="jdbc:mysql://localhost:3306/db_fides";
        String user="***";
        String password="***";
        try
        {
         Class.forName("org.gjt.mm.mysql.Driver");
         Connection c = DriverManager.getConnection(dbUrl,user,password);
         Statement s = c.createStatement();
    
         String query = "SELECT squadra1, squadra2, gol1, gol2  FROM risultati WHERE Categoria LIKE 'Allievi' AND Partita LIKE 'Campionato' ORDER BY squadra1";
    
          ResultSet r = s.executeQuery(query);
          while(r.next())
          {
            i2=i+1;
    
            String squadra1 = r.getString("squadra1").toUpperCase();
            String squadra2 = r.getString("squadra2").toUpperCase();
    
            int gol1 = Integer.parseInt(r.getString("gol1"));
            int gol2 = Integer.parseInt(r.getString("gol2"));
    
            ii=i;
    
            for (j=0; j<20; j++) {
            if (k[j]==squadra1) {i=j;}
            if (k[j]==squadra2) {i2=j;}
            }
    
            sq[i] = new Squadra(squadra1);
            sq[i2] = new Squadra(squadra2);
    
            k[i]=sq[i].ns;
            k[i2]=sq[i2].ns;
    
            if (gol1>gol2) {
              sq[i].vittoria();
              sq[i2].sconfitta();
            }
    
            if (gol1<gol2) {
              sq[i].sconfitta();
              sq[i2].vittoria();
            }
    
            if (gol1==gol2) {
              sq[i].pareggio();
              sq[i2].pareggio();
            }
    
            sq[i].pt=sq[i].punti();
            sq[i2].pt=sq[i2].punti();
            sq[i].pg=sq[i].partite();
            sq[i2].pg=sq[i2].partite();
            sq[i].v=sq[i].vittorie();
            sq[i2].v=sq[i2].vittorie();
            sq[i].n=sq[i].pareggi();
            sq[i2].n=sq[i2].pareggi();
            sq[i].p=sq[i].sconfitte();
            sq[i2].p=sq[i2].sconfitte();
            
            i=ii+2;
    
          }  
    
          s.close();
    
          for (j=0; j<20; j++) {
    
    
    out.print(sq[j].ns);
    out.print(sq[j].pt);
    out.print(sq[j].pg);
    out.print(sq[j].v);
    out.print(sq[j].n);
    out.print(sq[j].p);
    
         }
         }
    
         catch (Exception e)
         {out.print(e);
    %>
                 <h2 style="color:#FF0000">- ! -  ERRORE NELLA QUERY  - ! -</h2>
    <%
        }
    %>
    Questa volta non ci sono errori di sintassi del codice, però il risultato che ottengo non è ancora quello desiderato...
    Il problema è che non riesco a mettere insieme i vari punteggi delle squadre e l'output è costituito da una riga per partita.
    Per capirci visualizza qualcosa del genere:
    SQUADRA X, PT 3, GIOCATE 1, VINTE 1...
    ...
    SQUADRA X, PT 0, GIOCATE 1, VINTE 0...

    Ovviamente io devo visualizzare una sola riga per la SQUADRA X!

    Come al solito sono costretto a chiedere aiuto e ringrazio chiunque riesca ad indicarmi l'errore o a spiegarmi una strada migliore per raggiungere il mio obiettivo.
    Ciao a tutti!!!

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 © 2026 vBulletin Solutions, Inc. All rights reserved.