Question "?"

di il
8 risposte

Question "?"

Buonasera a tutti, qualcuno sa spiegarmi come mai non entra in un ciclo infinito? 

Anno sarebbe l'anno inserito in input 

for (int i = anno; i != 1970; i --){
    if (i % 400 == 0 || (anno % 4 == 0 && (anno % 100 != 0)) ) {
        giorni = giorni + 366;
    } else {
        giorni = giorni + 365;
    }
}

8 Risposte

  • Re: Question "?"

    Che senso ha il titolo che hai usato per questo thread?

    Che vuoi dire con "come mai NON entra in un ciclo infinito? "

  • Re: Question "?"

    Bo non sapevo che titolo mettere ahahah

    Se io inserisco 1969 mi stampa - 365 invece dovrebbe entrare in un ciclo infinito 

  • Re: Question "?"

    Scanner sc = new Scanner(System.in);
    int giorni = 0;
    System.out.println("anno");
    int anno = sc.nextInt();

    for (int i = anno; i != 1970; i --){
        if (anno % 400 == 0 || (anno % 4 == 0 && (anno % 100 != 0)) ) {
            giorni = giorni + 366;
        } else {
            giorni = giorni + 365;
        }
    }

    System.out.println(giorni);

    Cosi forse è più chiaro 

  • Re: Question "?"

    Ciao, se ho capito quello che vuoi fare, io modificherei il codice così:

    così se l'anno è minore di 1970 finisce nel ciclo infinito (tuttavia dovresti gestire anche questa eccezione)

    public class aaa {
        public static void main(String[] args) {
        
            Scanner sc = new Scanner(System.in);
            Long giorni = 0L;
            System.out.println("anno");
            Long anno = sc.nextLong();
    
            Long i = anno;
            while (i != 1970) {
                if (i % 400 == 0 || (i % 4 == 0 && (i % 100 != 0))) {
                        giorni = giorni + 366;
                } else {
                        giorni = giorni + 365;
                }
                i--;
            }
    
            System.out.println("giorni trascorsi dal 1/01/1970 al 1/01/" + anno + " : " + giorni);
        
        }
    }
  • Re: Question "?"

    Scanner sc = new Scanner(System.in);
    int giorni = 0;
    int anno = sc.nextInt();
    //Modifica così e vedi che anno è 
    System.out.println(anno);
    
    for (int i = anno; i != 1970; i --){
        if (anno % 400 == 0 || (anno % 4 == 0 && (anno % 100 != 0)) ) {
                giorni = giorni + 366;
                    } else {
                            giorni = giorni + 365;
                                }
                                }
                                System.out.println(giorni);
                                Cosi forse è più chiaro 
  • Re: Question "?"

    Ciao @sihsandrea, così non fa quello che vuole lui (se ho compreso correttamente la sua richiesta)

    lui vuole che se l'anno è minore di 1970 il programma si blocca in un loop infinito altrimenti calcola i giorni trascorsi dal '70 all'anno x inserito

    tuttavia usando il ciclo for si verifica il seguente problema:

    Quando l'utente inserisce 1969, il ciclo for esegue una sola iterazione con i uguale a 1969 poi si arresta

    poiché diventa 1968 alla seconda iterazione che è minore di 1970 il valore limite di decremento

    per risolvere questo il while è l'opzione migliore secondo me

    edit: scusatemi ho modificato il post più volte avevo scritto il contrario di quello che volevo dire, non sono lucidissimo

  • Re: Question "?"

    Il ciclo for esegue una istruziine prima di verificare

    02/02/2025 - Panda96 ha scritto:

    for (int i = anno; i != 1970; i --){

    Istruzione for parte per parte...

    I=anno viene eseguito per primo

     i != 1970 viene controllato prima di iterare, se falso si interrompe

    Esegue i comandi

     i --) il valore di i viene decrementato a patto che la condizione è true ma sarà sempre false.

    La condizione non è > o < ma =

    Un ciclo for va da a

    Tradotto sarebbe per i che va da 1 a n ma tu hai scritto per i che va da 1 e vale 4...

    Non avrebbe dovuto eseguire neanche la prima istruzione.

    Il ciclo for serve per eseguire istruzioni per un numero di volte prestabilito.

    Se non conosci quel numero di cicli usi while. In questo caso entra in loop

    Prova con anno=1973 e vedi se esegue tre cicli.

  • Re: Question "?"

    Perche' non va in loop infinito?

    perche' fa 'il giro'!

    1969,1968, ... 0, -1, ... -2147483648, 2147483647 ... 1971,1970, STOP

    E data la velocita' dei computer di oggi, contare 4 miliardi e' questione di una manciata di secondi (2 o 3 secondi).

    E per un colpo di fortuna pazzesco, stampa

    -365

    .

    int anno=-2147483648;
    anno--;
    System.out.println(anno);

    stampa

    2147483647
Devi accedere o registrarti per scrivere nel forum
8 risposte