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

    ArrayIndexOutOfBoundsException

    Ciao a tutti, sto creando un programma che simuli il famoso gioco "campo minato", dopo aver creato la classe CampoMinato (che compila correttamente), ho creato un main per testare delle funzioni, e prendendo degli argomenti da linea di comando viene generata un eccezione di tipo ArrayIndexOutOfBoundsException e non capisco il perchè.

    vi posto il codice:

    classe CampoMinato

    codice:
    public class CampoMinato {
    	
    	private int[][] Matr; //Matrice che rappresenta il campo
    	private int righe; //Numero righe
    	private int colonne; //Numero colonne
    	private int mine; //Numero mine
    	private int celleScoperte; //Numero celle scoperte
    	
    	// campi statici usati per la rappresentazione interna del contenuto di una cella
    	
    	private static final int NONSC = -1; //La cella (r,c) non è ancora stata scoperta
    	private static final int MINA = -2; //La cella (r,c)contiene una mina
    	
    	// campi statici che definiscono i caratteri usati nella stampa
    	
    	private static char NONSC_CHAR = '-'; //Carattere per rappresentare una cella non scoperta
    	private static char MINA_CHAR = '*'; //Carattere per rappresentare una mina
    	
    	//COSTRUTTORI
    	
    	public CampoMinato(int r, int c) {
    		righe = r;
    		colonne = c;
    		mine = 0;
    		celleScoperte = 0;
    		Matr = new int[righe][colonne];
    		for(int i = 0; i < righe; i++) {
    			for(int j = 0; j < colonne; j++) {
    				Matr[r][c] = NONSC;
    			}
    		}
    	}
    	
    	public CampoMinato(int dim) {
    		this(dim, dim);
    	}
    	
    	//METODI
    	
    	public int getRighe() {
    		return righe;
    	}
    	
    	public int getColonne() {
    		return colonne;
    	}
    	
    	public int getMine() {
    		return mine;
    	}
    	
    	public int getCelleScoperte() {
    		return celleScoperte;
    	}
    	
    	public int getCelleDaScoprire() {
    		return righe * colonne - celleScoperte;
    	}
    	
    	public static void setMinaChar(char ch) {
    		MINA_CHAR = ch;
    	}
    		
    	public static void setNonscChar(char ch) {
    		NONSC_CHAR = ch;
    	}
    	
    	private void stampa(char cMina) {
    		System.out.print("  ");
    		for(int c = 0; c < colonne; c++) {
    			System.out.printf(" %2d", c);
    		}
    		System.out.println();
    		
    		for(int r = 0; r < righe; r++) {
    			System.out.printf("%2d", r);
    			
    			for(int c = 0; c < colonne; c++) {
    				if(Matr[r][c] == NONSC)
    					System.out.printf(" %2c", NONSC_CHAR);
    				else
    					if(Matr[r][c] == MINA)
    						System.out.printf(" %2c", cMina);
    					else
    						System.out.print("  " + Matr[r][c]);
    			}
    			System.out.println();
    		}
    		System.out.println();
    	}
    	
    	public void stampaSenzaMine() {
    		this.stampa(NONSC_CHAR);
    	}	
    	
    	public void stampaTutto() {
    		this.stampa(MINA_CHAR);
    	}
    }
    main

    codice:
    import java.lang.*;
    
    public class Esercizio1 {
    	
    	public static void main(String[] args) {
    					
    		int r = Integer.parseInt(args[0]);
    		int c = Integer.parseInt(args[1]);
    		
    		CampoMinato campo = new CampoMinato(r,c);
    		
    		campo.stampaTutto();
    		
    		campo.setNonscChar('?');
    		
    		campo.stampaTutto();
    	}
    }
    Grazie.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    La JVM ti dice anche a quale riga viene sollevata tale eccezione... prima di tutto controlla tu stesso quella riga, se hai problemi ad individuare il problema, posta l'eccezione completa di questa informazione.

    Per quanto riguarda quel codice, dando un'occhiata al volo, l'unico punto in cui si può sollevare mi sembra il main: glieli passi i due valori di righe e colonne quando esegui?


    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
    si l'eccezione viene sollevata nel main alla riga "int r = Integer.parseInt(args[0]);"

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.