2014-06-16 9 views
5

Ich versuche eine Aufgabe zu lösen (ich bin immer noch sehr neu in Java) und habe viele Ressourcen durchforstet, um diesen Konflikt zu lösen, kann aber immer noch nicht ganz klar kommen : Thunfisch ist mein Scanner variabel)Doppelte lokale Variable (For Loops)

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); 
    } 
} 

}

Ergebnis ist: Exception in thread "main" java.lang.Error: Ungelöste Kompilation Problem: Doppelte lokale Variable

gezählt

Das Problem Ich soll lösen ist:

Schreiben Sie ein Programm, um eine Zahl einzulesen und alle Zahlen von 1 bis zur Nummer zusammenzufassen. Wenn z. B. der Benutzer 6 eingibt, ist der Ausgang 21 (1 + 2 + 3 + 4 + 5 + 6).

HINZUGEFÜGT: Ich lese eine Frage(), die ziemlich ähnlich ist, aber ich habe den Smae-Fehler nicht gemacht, indem ich es vorher erklärt habe.

Antwort

4

Sie deklarieren zwei Variablen mit demselben Namen im selben Bereich: counted wird außerhalb der Schleife und innerhalb der Schleife deklariert. By the way, nach Ihrer Spezifikation:

Schreiben Sie ein Programm zum Einlesen einer Zahl und summieren Sie alle Zahlen von 1 bis diese Nummer. Zum Beispiel, wenn der Benutzer 6 eingibt, dann ist die Ausgabe 21 (1 + 2 + 3 + 4 + 5 + 6)

Sie brauchen nicht die erste counted var, denn es ist eine Konstante (die Konstante 1). Sie können, so erklären 1 als Konstante auf diese Weise:

final int STARTING_NUMBER = 1 

und dann diese Konstante in der Schleife verwenden:

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: Sie Ihre Variablen deklarieren können, wo immer Sie wollen. Wichtig ist, dass Sie sie einmal im selben Umfang deklarieren.

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

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

index außerhalb der Schleife deklarieren: Sie können wie etwas tun. Das Ergebnis wird sich nicht ändern. Es ist jedoch üblich, die Variable for loop als Index zu deklarieren (Sie können diese Variable index oder counter oder i oder mySisterIsCool usw. nennen) innerhalb der for-Schleife selbst (genauer gesagt, in ihrem Schutz) für eine bessere Lesbarkeit.

+0

Sorry zu fragen, wie ich bin sehr neu in Java, was ist Index? (Index = STARTING_NUMBER; index <= gezählt; index ++) Wenn es eine Variable ist, sollte es nicht deklariert werden? – user3744056

+2

'Index' ist eine Variable, wie 'gezählt' oder 'Summe'. Sie deklarieren es innerhalb der for-Schleife und gemäß dem Code nimmt 'index' Werte von STARTING_NUMBER zu 'counted'. – superpuccio

+2

könnte ich auch tun: 'INT gezählt, Summe, Index;' Schreiben Sie dann in die for-Schleife: 'for (index = STARTING_NUMBER; index <= gezählte; index ++)' – superpuccio

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

Hier deklarieren Sie ein int mit dem exakt gleichen Namen, wie es bereits existiert. Verwendung so etwas wie:

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

oder

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

, wenn Sie die vorher Variable verwenden möchten, erklärt

2

der Tat erklärt Sie Variable counted außerhalb der Schleife und als Schleifenzähler, so dass diese 2 Variablen mit demselben Namen befinden sich im selben Block (Teil des Codes zwischen { und }.

Sie sollten entweder vermeiden diese Variable außerhalb der Schleife deklarieren (wenn Sie es als Schleifenzähler nur müssen) oder außerhalb der Schleife deklarieren und dann wie folgt in Schleife verwenden:

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

Sie sind nicht im gleichen Umfang. 'for' führt einen neuen Bereich ein. – EJP

3

Das Problem ist, Sie haben erklärte den Int zweimal "gezählt". Einmal oben im Code und einmal in der for-Schleife. Durch das Entfernen der int-Deklaration aus der for-Schleife sollte dies behoben werden. Beispiel:

+0

Schätzen Sie, dass Sie meine Frage beantwortet haben! – user3744056

2

In Java muss der Umfang der lokalen Variablen beachtet werden. Um das zu beheben, benennen Sie das "gezählte" in der for-Anweisung um.

Was das Problem: Besuche http://en.wikipedia.org/wiki/Carl_Friedrich_Gauss#Anecdotes

+0

Interessant gelesen, aber nicht wirklich relevant. Trotzdem danke für die Beantwortung meiner Frage! – user3744056

+0

Es ärgert mich sehr, wenn Programmierübungen einen dummen Prozess simulieren. – laune

5

In Java (im Gegensatz zu C++) Ihren lokalen Variablen die gleichen Namen nicht haben können, als Variablen, bevor erklärt, wenn sie im gleichen Bereich F. E. sind

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

Sie können diesen Code nicht kompilieren.

In Ihrem Beispiel sollen Sie machen es so etwas wie die:

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); 
}   

Das Ergebnis in der Variablen Summe sein wird, und es wird nur ein einziges Mal auf der Konsole angezeigt werden.

+0

Was meinst du "es wird nur einmal auf deiner Konsole angezeigt."? Tut mir leid dass ich gefragt habe. – user3744056

+0

Ich setzte die sout (System.out.println) außerhalb der for-Schleife. Deshalb wird Ihr Ergebnis nur einmal angezeigt, nicht in der Schleife. – PatNowak

+0

Wirklich groß danke für deinen Beitrag zu meinem Problem! – user3744056