Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

    Salve volevo chiedervi se sapreste dirmi il motivo dell'errore che ho messo nel titolo in questo codice:

    codice:
    public  List riduzione (Score s){
         array=new ArrayList();
         Score primoscore=new Score(s.dim,s.a);
         bubbleSort(primoscore.a);
         array.add(0,primoscore);
    
    
         if(!controlloscore(primoscore)){
               System.out.println("Questo grafo non esiste!!!");
               System.exit(0);
         }
    
    
         for(int i=1;!check((Score)array.get(i));i++){
                primoscore=taglia((Score)array.get(i-1));
                bubbleSort(primoscore.a);
                if(!controlloscore(primoscore)){
                    System.out.println("Questo grafo non esiste!!!");
                    System.exit(0);
                }
                array.add(i, primoscore);
         }
         
        return array;
     }
    Ultima modifica di LeleFT; 04-05-2015 a 09:09 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da campaenrico Visualizza il messaggio
    Salve volevo chiedervi se sapreste dirmi il motivo dell'errore che ho messo nel titolo in questo codice:
    Il motivo è ovvio dal messaggio: il size è 1 (c'è un solo elemento all'indice 0) e l'indice 1 ovviamente non esiste. Relativo a quel ArrayList ... si intuisce, chiaramente.

    Ma senza comprendere il contesto generale, è difficile dire: a) se quello che hai scritto ha senso, e se lo ha, b) come evitare il problema.
    Cosa è Score? Cosa fa check() ? Perché nel for testi solo il not-check come condizione?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Si scusami, allora Score è una classe così composta:

    codice:
    public class Score {    List array;
        public int dim;
        int a[];
        Score(int dim, int a[]){
            this.dim=dim;
            this.a = new int [dim];
            this.a=a;
        }

    Il metodo taglia va a diminuire ogni volta la dimensione dell'array dello Score e a fare decrementare ogni valore dell'array stesso, fino a che non ci saranno tutti 0, e questo è quello che controlla il ceck del for appunto:

    codice:
    public boolean check(Score s){  
     boolean res=true;
         for(int i=0;i<s.dim;i++){
             if(s.a[i]>0) return false;
         }
     return res;
     }

    ora ho capito il problema, dovevo mettere infatti il for così giuto:

    codice:
    for(int i=1;!check((Score)array.get(i-1));i++){.....}

    ma mi da un errore qua che non capisco:

    codice:
    Exception in thread "JavaFX Application Thread" java.lang.ArrayIndexOutOfBoundsException: 5
    
    public boolean controlloscore(Score s){
        int count=0;
        int counter=0;
        for(int i=0;i<s.dim;i++){
            if(s.a[i]%2!=0)
            count++;}
        if(count%2!=0)return false;
        count=0;
        if(s.a[dim-1]<=2){ --------------------------------------------------errore
        
        for(int i=0;i<s.dim;i++){    
        if(s.a[i]==1)count++;
        }
        if(count%2==0)return true;
        if(count==0){
          for(int i=0;i<s.dim;i++){
            if(s.a[i]==2)counter++;   
        }
        if(counter<3)return false;  
        }
        }
    }
    Ultima modifica di LeleFT; 04-05-2015 a 09:10 Motivo: Aggiunti i tag CODE

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da campaenrico Visualizza il messaggio
    codice:
    public class Score {    List array;
        public int dim;
        int a[];
        Score(int dim, int a[]){
            this.dim=dim;
            this.a = new int [dim];
            this.a=a;
        }
    Già qui .... dubbio. Quale è il senso di istanziare un array di int e assegnarlo al campo a se poi alla riga dopo assegni al campo a il parametro a?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Scusami non ho capito bene, le ultime due righe dici non hanno senso?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da campaenrico Visualizza il messaggio
    Scusami non ho capito bene, le ultime due righe dici non hanno senso?
    No ... non molto. Non vedi che assegni al campo a due cose diverse una dopo l'altra?
    Quale è il senso di tenere un array e una dimensione come informazioni distinte? Se dim è la dimensione logica, ovvero il numero valido di elementi, mantenendo la stessa capacità fisica dell'array ... allora ok, va bene e ha senso. Il costruttore andrebbe comunque un pochino rivisto.

    E se un Score deve essere creato da un altro Score, si può anche pensare a quello che viene definito informalmente "costruttore di copia", che riceve un oggetto di quello stesso tipo.
    Ultima modifica di andbin; 03-05-2015 a 00:13
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Ok grazie mille

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