Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772

    [Java] eccezione nextInt

    Ciao,
    Ho un problema con la funzione nextInt() della classe Random.

    Ho la necessità di generare due valori, x e y, tali che la radice della somma dei loro quadrati sia uguale all'intero il cui valore è a metà fra due interi r1 ed r2.

    for(isGood = 0, x = 0, y = 0; isGood != (r1 + r2) / 2{
    x = nr.nextInt(r1) + 1;
    y = nr.nextInt(r1) + 1;
    isGood = (int)Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
    }

    Il problema è che una volta su dieci (troppo) mi scatta questa eccezione:

    Exception in thread "main" java.lang.IllegalArgumentException: n must be positive at java.util.Random.nextInt(Random.java:248)
    at Swing.Prova.calcola(Prova.java:154)
    at Swing.Main.main(Main.java:46)

    Le linee incriminate sono, indistintamente le due che invocano nextInt().

    Ho guardato tra l'altro nextInt():
    public int nextInt(int n) {
    if (n<=0)
    throw new IllegalArgumentException("n must be positive");

    In pratica scatta l'eccezione come se l'upper bound del numero da generare fosse negativo, ma r1 ed r2 sono entrambi positivi ed non modificabili, nn a caso funziona quasi sempre.

    Tuttavia ogni tanto salta.

    Grassie a tutti coloro che mi illuminano.

    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    per sfizio fai un:

    codice:
    ...
     x = nr.nextInt(Math.abs(r1)) + 1; 
    ...
    sennò cambia tecnica di generazione:

    codice:
    ...
    x = (int) ((Math.random() * 36536) % r1) + 1;
    ...
    fai un tracing sennò, facendo stampare al ciclo il valore delle variabili di volta in volta per capire in che punto si intoppa.




    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

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.