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

    Eccezione strana [Java]

    Non riesco a far gestire un'eccezione in un mio programma. Allora, questo programma deve prendere degli argomenti da riga di comando, ma vorrei fare in modo che controllasse se effettivamente ci sono. Vi pasto il frammento di codice che ho messo per controllare l'inserimento:

    Codice PHP:
    System.out.println("\nProgramma partito\n");

    if(
    args[0] == ""usage();

    else if(
    args[1] == ""usage();

    else if(
    args[2] == ""usage(); 
    Premetto che la funzione usage() l'ho dichiarata. Il problema è che quando lancio il programma il compilatore mi da l'eccezione:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at scan2.main(scan2.java:21)

    Che vuol dire sto sperimentando alcune cose in Java, non ridete se vedete orrori
    Powered by Linux

    "Windows cerca di fare Unix e ci riesce male, Red Hat cerca di fare Windows e ci riesce benissimo" (Jimmy Olgeni)

  2. #2
    Utente di HTML.it L'avatar di Fox82
    Registrato dal
    Feb 2002
    Messaggi
    459
    Succede perchè superi i limiti dell'array args (Java è molto preciso con questi controlli)

    Immagino che con quei controlli volevi verificare quanti argomenti vengono passati alla linea di comando; puoi fare cosi:

    codice:
    public class Test
    {
    	private static void usage()
    	{
    		System.out.println("Bad usage\n");
    	}
    
    	public static void main(String args[])
    	{
    		System.out.println("\nProgramma partito\n");
    		if(args.length <= 2 ) 
    			usage();
    	}
    }
    L'attributo length è tipico di ogni array e calcola la lunghezza
    Linux user number 403381

    Stop TCPA!

  3. #3
    Ok, tutto risolto con i length. Scusa una curiosità... come faccio a superare il limite di array se l'argomento è vuoto?
    Powered by Linux

    "Windows cerca di fare Unix e ci riesce male, Red Hat cerca di fare Windows e ci riesce benissimo" (Jimmy Olgeni)

  4. #4
    Utente di HTML.it L'avatar di Fox82
    Registrato dal
    Feb 2002
    Messaggi
    459
    Ad esempio se lancio

    java Test 1

    args.length avrà come valore 1 e l'unico argomento valido è args[0].
    Ovviamente cercando di accedere ad args[1] e args[2] ti ritrovi fuori dalla memoria allocata per l'array.


    Un metodo più carino può essere quello di usare args senza controlli e, nel momento in cui lo usi, catturare l'eccezione ArrayIndexOutOfBoundsException e chiamare quindi usage().
    Linux user number 403381

    Stop TCPA!

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Attenzione: il confronto con elementi di tipo stringa non farlo con l'operatore = = ma fallo usando il metodo equals:
    codice:
    if (args.length < 3) {
       usage();
    } else {
       if (args[0].equals("") || args[1].equals("") || args[2].equals("")) usage();
    }
    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

  6. #6
    Ok tutto risolto grazie
    Powered by Linux

    "Windows cerca di fare Unix e ci riesce male, Red Hat cerca di fare Windows e ci riesce benissimo" (Jimmy Olgeni)

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.