2016-06-23 102 views
5

Quindi sto creando un programma che prende un input int dalla riga di comando e quindi cerca l'array nel programma per l'int e, se trovato, restituisce l'indice del numero. In caso contrario, genera un'eccezione che indica che non è stata trovata e termina il programma. Questo è quello che ho finora:Utilizzo di try-catch con un ciclo if else

public static void main(String[] args) { 

    int[] intArray = {9, 97, 5, 77, 79, 13, 7, 59, 8, 6, 100, 55, 35, 89, 74, 66, 32, 47, 51, 88, 23}; 
    System.out.println(Arrays.toString(intArray)); 

    int intArgs = Integer.parseInt(args[0]); 

    System.out.println("Your entered: " + intArgs); 

    FindNum(intArray, intArgs); 
} 

public static int FindNum(int[] intArray, int intArgs) { 
    for (int index = 0; index < intArray.length; index++){ 
     try{ 
      if (intArray[index] == (intArgs)) 
       System.out.println("Found It! = " + index); 
      else 
       throw new NoSuchElementException("Element not found in array."); 
     } catch (NoSuchElementException ex){ 
      System.out.println(ex.getMessage()); 
     } 
    } 
    return -1;  
} 

Mentre questo tipo di opere e in grado di trovare l'indice, si genera l'eccezione per ciascun numero nella matrice invece di uno solo per l'intero array. E se trova il numero nella matrice, allora sostituisce una delle linee con la riga di conferma dal ciclo. Uscita Esempio per 66:

[9, 97, 5, 77, 79, 13, 7, 59, 8, 6, 100, 55, 35, 89, 74, 66, 32, 47, 51, 88, 23] 
Your entered: 66 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Found It! = 15 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 
Element not found in array. 

Come si può fare in modo che quando trova il numero, viene stampato soltanto la linea indice e viceversa per l'eccezione. Sento che potrebbe avere qualcosa a che fare con il ciclo, ma non sono sicuro di cosa posso fare per evitarlo.

+1

Inserire il ciclo all'interno del blocco try anziché inserire il try-block all'interno del ciclo. o meglio ancora, perché anche avere un blocco di prova? Basta fare la ricerca, e se non trovato, stampare il messaggio di errore. – FredK

+1

Metti il ​​tuo try-catch al di fuori del ciclo for, non al suo interno. – ManoDestra

+0

si sta lanciando l'eccezione ogni volta per verificare il valore con un elemento nella matrice e trova una mancata corrispondenza, che è errata seno è possibile concludere l'elemento non in matrice solo dopo aver visitato tutti gli elementi. –

risposta

4

È possibile riscrivere il codice come qui di seguito ..

Come per il codice, si sta verificando ogni elemento e se non corrispondono, si sta gettando un'eccezione.Questo non è accurato, dal momento che non è possibile concludere se l'elemento non esiste a meno di non scansionare tutti gli elementi. In quel caso puoi usare i flag per determinare se trovi una corrispondenza e dopo il ciclo for puoi controllare la bandiera e lanciare un'eccezione. Anche in questo caso, se si prevede di rilevare l'eccezione all'interno dello stesso metodo, potrebbe non essere necessario eliminare l'eccezione. Invece puoi semplicemente restituire l'indice o -1 come sotto ..

public static int FindNum(int[] intArray, int intArgs) { 
    for (int index = 0; index < intArray.length; index++){ 
     if (intArray[index] == (intArgs)){ 
      System.out.println("Found It! = " + index); 
      return index; 
     } 
    } 
    throw new NoSuchElementException("Element not found in array."); 
} 
+0

Mentre funziona, devo lanciare un'eccezione secondo i requisiti. Grazie per l'aiuto però ... – AvenNova

+0

Ho aggiornato la risposta .. dal mio codice precedente, devi solo sostituire il 'return -1' a un'istruzione per lanciare l'eccezione .. –

+1

Questo funziona ma getta ancora il testo di eccezione rosso. Quindi ho usato un try catch per quando chiamo il metodo FindNum in main per stampare solo il testo e ora funziona! Grazie per l'aiuto! – AvenNova

0

Rimuovere il resto e inserire la dichiarazione all'interno del tentativo. Inizializza una variabile booleana flag = false. prima dell'iterazione. Se l'elemento si trova all'interno del ciclo, aggiungi condition flag = true e quindi interrompi il ciclo. Ora dopo la fine dell'iterazione scrivi questo: if (! Flag) System.out.print ("Element not found"); fondamentalmente si stampa l'elemento non trovato su ogni iterazione, tranne dove l'elemento viene trovato che è un errore terribile.

1
int i = -1; 
... 
    if (intArray[index] == intArgs) i = index; 
... 

cercare di rendere una variabile int per mantenere un indice dell'elemento trovato. L'ultima riga del metodo genera un'eccezione se non viene trovato nulla.

Un altro modo è restituire l'indice direttamente e generare un'eccezione alla fine senza condizioni.

if (intArray[index] == intArgs) return index; 
... 
throw new NoSuchElementException(...); 

Si consiglia di non restituire il codice di errore. Più naturale per Java, in questo caso, sta lanciando un'eccezione non controllata.

6

cerca l'array nel programma per l'int e, se trovato, restituisce l'indice del numero. In caso contrario, genera un'eccezione che indica che non è stata trovata e termina il programma.

Leggi ciò che hai scritto attentamente.

Se non viene trovato, è necessario generare un'eccezione. Sai solo che non hai trovato il valore una volta che hai attraversato tutti i suoi elementi. Quindi non puoi gettare da dentro il loop. Puoi lanciare solo dopo il ciclo, se non hai trovato l'elemento.

In secondo luogo, si suppone che si generi un'eccezione. Non lo stai facendo: invece, butti e prendi l'eccezione che hai appena lanciato. Il punto di lancio di un'eccezione è far sapere al chiamante del metodo che accade qualcosa di eccezionale. Non devi gettare e prendere un'eccezione all'interno di un metodo.

Infine, il metodo deve restituire l'indice. Ma non è così. Restituisce sempre -1.

+1

Grazie! Il tuo e il consiglio di redflar3 ha aiutato un sacco, finalmente ce l'ha fatta! Vorrei poter selezionare due risposte invece di una: D – AvenNova