2014-06-16 20 views
5

Sto cercando di risolvere un compito (sono ancora molto nuovo in Java) e ho sfruttato molte risorse per risolvere questo conflitto, ma non riesco ancora a risolverlo. : Il tonno è la mia variabile Scanner)Variabile locale duplicata (per loop)

int counted, sum, counted1; 


    System.out.print("Enter your number to be calculated: "); 
    counted = tuna.nextInt(); 
    counted1 =tuna.nextInt(); 


    for(int counted=0;counted<=counted1;counted++){ 
     System.out.println("The sum is: "+ counted); 
    } 
} 

}

risultato è: Exception in thread "main" java.lang.Error: non risolto problema di compilazione: variabile locale Duplicate contato

Il problema Dovrei risolvere è:

Scrivere un programma per leggere un numero e sommare tutti i numeri da 1 a quel numero. Ad esempio, se la chiave utente in 6, l'uscita è 21 (1 + 2 + 3 + 4 + 5 + 6).

AGGIUNTO: Ho letto una domanda() che è piuttosto simile ma non ho commesso l'errore smae dichiarandolo prima.

risposta

4

Si stanno dichiarando due variabili con lo stesso nome nello stesso ambito: counted viene dichiarato all'esterno del ciclo e all'interno del ciclo. A proposito, secondo le vostre specifiche:

Scrivere un programma per leggere un numero e sommare tutti i numeri da 1 a quel numero. Per esempio, se la chiave utente 6, allora l'uscita è 21 (1 + 2 + 3 + 4 + 5 + 6)

non è necessario il primo counted var, perché è una costante (la costante 1). È possibile, quindi, dichiarare 1 come una costante in questo modo:

final int STARTING_NUMBER = 1 

e quindi utilizzare questa costante nel ciclo:

int counted, sum; 
counted = tuna.nextInt();  

for(int index=STARTING_NUMBER;index<=counted;index++){ 
    sum=sum+index; 
} 
System.out.println("The sum is: "+ sum); 

EDIT: è possibile dichiarare le variabili dove vuoi. L'importante è che tu li dichiari una volta nello stesso ambito. Si può fare qualcosa di simile:

int counted, sum, index; 
counted = tuna.nextInt();  

for(index=STARTING_NUMBER;index<=counted;index++){ 
    sum=sum+index; 
} 
System.out.println("The sum is: "+ sum); 

dichiarando index fuori del ciclo. Il risultato non cambierà. È una pratica comune, tuttavia, dichiarare la variabile che lo for loop utilizza come indice (è possibile chiamare questa variabile index o counter o i o mySisterIsCool e così via) all'interno del ciclo for stesso (nella sua protezione, per essere più precisi) per una migliore leggibilità.

+0

Mi dispiace chiedere come sono molto nuovo a Java, che cos'è l'indice? (Index = STARTING_NUMBER; index <= counted; index ++) Se è una variabile non dovrebbe essere dichiarata? – user3744056

+2

"indice" è una variabile, come "conteggiata" o "somma". Lo si dichiara all'interno del ciclo for e, in base al codice, "index" assume valori da STARTING_NUMBER a "conteggiati". – superpuccio

+2

Potrei fare anche: 'INT contato, somma, indice;' e quindi, nel ciclo for, scrivi: 'for (index = STARTING_NUMBER; index <= counted; index ++)' – superpuccio

3
for(int counted=0;counted<=counted1;counted++){ 
    System.out.println("The sum is: "+ counted); 
} 

qui si dichiara nuovamente un nome con lo stesso nome già esistente. uso qualcosa di simile:

for(int counted1=0;counted1<=counted1;counted1++){ 
    System.out.println("The sum is: "+ counted1); 
} 

o

for(counted=0;counted<=counted1;counted++){ 
    System.out.println("The sum is: "+ counted); 
} 

se si desidera utilizzare il precedentemente dichiarato variabile

2

Infatti avete dichiarato variabile counted di fuori del ciclo e come un contatore di cicli, per cui questi 2 le variabili con lo stesso nome si trovano nello stesso blocco (parte del codice compreso tra { e }.

Si dovrebbe neanche evitare dichiarando questa variabile di fuori del ciclo (se ne avete bisogno come solo un contatore loop) o dichiarare fuori del ciclo e quindi utilizzarlo in loop come segue:

for(;counted<=counted1;counted++) 
+0

Non sono nella stessa portata. 'for' introduce un nuovo ambito. – EJP

3

Il problema è che devi dichiarato l'int "contato" due volte. Una volta nella parte superiore del codice e una volta all'interno del ciclo for. La rimozione della dichiarazione int dal ciclo for dovrebbe risolvere questo esempio:

for(counted=0;counted<=counted1;counted++) 
+0

Apprezzo che tu abbia risposto alla mia domanda! – user3744056

2

In Java, è necessario osservare l'ambito delle variabili locali. Per risolvere ciò, rinominare il "conteggiato" nell'istruzione for.

Per quanto riguarda il problema: controllare http://en.wikipedia.org/wiki/Carl_Friedrich_Gauss#Anecdotes

+0

Lettura interessante anche se non molto pertinente. Tuttavia grazie per aver risposto alla mia domanda! – user3744056

+0

Mi irrita molto se gli esercizi di programmazione simulano un processo stupido. – laune

5

In Java (contrariamente a C++) le variabili locali non possono avere lo stesso nome, come variabili dichiarate prima se sono nella stessa fascia di f.e.

{ //external variable 
    int x; 
    { //internal variable 
     int x; 
     //do something 
    } 
} 

Non sarà possibile compilare questo codice.

Nel tuo esempio si dovrebbe fare una cosa del genere:

int counted, sum; 


System.out.print("Enter your number to be calculated: "); 
counted = tuna.nextInt(); 


for(int counter=0;counter<=counted;counter++){ 
    sum=sum+counter; 
} 
System.out.println("The sum is: "+ sum); 
}   

Il risultato sarà la somma variabile e verrà visualizzata sulla console solo una volta.

+0

Cosa intendi per "verrà visualizzato sulla tua console solo una volta."? Scusa la domanda. – user3744056

+0

Metto il sout (System.out.println) all'esterno del ciclo for. Ecco perché il risultato verrà visualizzato solo una volta, non nel ciclo. – PatNowak

+0

Davvero grande grazie per il tuo contributo al mio problema! – user3744056