Variable wird nicht gefunden und Arrays

Status
Nicht offen für weitere Antworten.

schrobi

Aktives Mitglied
Hallo zusammen,

ich wende mich an Euch um meinem Laptop einen frühzeitigen Tod zu ersparen...:autsch:

Ich sitze schon ein paar Tage an dieser Aufgabe und habe schon den Anfang hinbekommen aber im moment häng ich fest und komm absolut nicht weiter.

Also folgende Aufgabenstellung:
Schreiben sie ein Java‐Programm Summation.java, das maximal zehn ganze Zahlen zwischen 1
und 10 wiederholt von der Tastatur einliest. Nach der Eingabe der Zahl soll eine Mitteilung erfolgen,
ob die Eingabe korrekt war oder nicht, d. h. im Bereich zwischen 1 und 10 lag. Die Anzahl der
korrekten und der falschen Eingaben ist zu zählen. Die korrekten Zahlen sind in einer Reihung zu
speichern. Die Eingabe der Zahl Null beendet das Einlesen.
Dem Programmbenutzer soll die Gesamtzahl der Eingaben, die Anzahl der korrekten und der falschen
sowie die Summe der korrekten Zahlen am Bildschirm ausgegeben werden.
Hinweis:
Im Programm werden interaktiv Benutzereingaben verarbeitet. Überlegen sie sich eine einfache
Variante (wenig Programmcode) für das „Auffüllen mit Nullen”, wenn weniger als zehn Zahlen
eingegeben werden.
So weit so gut.

Mein bisheriger Code:

Java:
import java.io.*;
 
 
public class Summation {
 
 	
	public static void main (String[] args) throws IOException {
	
	BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
	
        String inData;
        int    zahl;
        int summe; 
       	try {
	   	
	   	int wdh = 1;
    	  	
    	  	while(wdh <= 10) {
			
		    System.out.println("Geben Sie eine Zahl zwischen 1 und 10 ein:");
		    inData = stdin.readLine();
   		    zahl = Integer.parseInt( inData );
       		    int number[] = new int[10];
		    int index = 0;
       		           		    
       		    if (zahl == 0){
       		    	break;
       		    } else if ((zahl >= 1) && (zahl <= 10)) {
       				System.out.println("Richtig!");
       				index  = wdh;
       				number[index] = zahl;
       				summe = number[0] + number[1] + number[2] + number[3] + number[4] 
       					  + number[5] + number[6] + number[7] + number[8] + number[9];
       			} else {       				
       				System.out.println("Falsch!");
       			}
       			wdh++;
       		}
       			  
       		//System.out.println("test:" + summe);	
       	}   
       	   		
   		catch (NumberFormatException ex ) {
   	 		System.out.println("Bitte nur GANZE ZAHLEN eingeben!" );
   	 		System.out.println("Starten Sie das Programm erneut!" );
   		}	
	}
}

Ui, hoffe man kann das lesen. Sieht sehr verschoben aus...

Naja, also mein Problem ist im Moment, dass wenn ich das untere System.out.println("test:" + summe); nicht auskommentiere er meine "summe" nicht findet. Hab es schon in verschiedensten Kombinationen versucht und auch den Try-Catch-Block entfernt aber er mag nicht.
Wäre über einen Tipp sehr Dankbar und auch über einen Kommentar ob ich überhaupt auf dem richtigen Weg bin was das Array betrifft.

Vielen Dank schonmal.

Schrobi🙂
 
Zuletzt bearbeitet von einem Moderator:
Also ich habe es kurz mal in Eclipse eingegeben und es ist nicht so, dass er die 'summe' nicht findet, sondern er mag nicht, dass die 'summe' nicht initialisiert werden könnte.

Einfach mal
Code:
int summe = 0;

versuchen.

Gruß,
Michael
 
Das Ganze würde fast funktionieren. Hab nur ein paar kleine Änderungen gemacht (Variable summe mit 0 initialisieren, Schleife bis < 10 statt <= 10 laufen lassen, Aufsummieren korrigiert)

Code:
import java.io.*;
 
 
public class Summation {
 
 	
	public static void main (String[] args) throws IOException {
	
	BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
	
        String inData;
        int    zahl;
        int summe = 0; 
       	try {
	   	
	   	int wdh = 1;
    	  	
    	  	while(wdh < 10) {
			
		    System.out.println("Geben Sie eine Zahl zwischen 1 und 10 ein:");
		    inData = stdin.readLine();
   		    zahl = Integer.parseInt( inData );
       		    int number[] = new int[10];
		    int index = 0;
       		           		    
       		    if (zahl == 0){
       		    	break;
       		    } else if ((zahl >= 1) && (zahl <= 10)) {
       				System.out.println("Richtig!");
       				index  = wdh;
       				number[index] = zahl;
       				summe = summe + zahl;
       			} else {       				
       				System.out.println("Falsch!");
       			}
       			wdh++;
       		}
       			  
       		System.out.println("test:" + summe);	
       	}   
       	   		
   		catch (NumberFormatException ex ) {
   	 		System.out.println("Bitte nur GANZE ZAHLEN eingeben!" );
   	 		System.out.println("Starten Sie das Programm erneut!" );
   		}	
	}
}
 
Oh man wie doof... Immer diese kleinen simplen Fehlerchen..😳
Vielen Dank X5-599 🙂

Das mit meinem Array ist aber wohl nicht so richtig oder? Bekomm da nun wenn ich alle zehn Zahlen eingegeben habe den Fehler:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at Summation.main(Summation.java:33)

Aber wenn ich weniger als Zehn Zahlen eingeben und die Eingabe vorher mit "0" beende gibt er zwar keinen Fehler aber er zählt die Eingaben nicht zusammen sondern gibt nur die letzte Eingabe aus..

Werd mal noch ein wenig mit dem Array rumspielen, bin aber für Tipps und Vorschläge weiterhin offen 🙂

Schrobi


edit:
Auch vielen Dank an Dich 0001001. Für die kleine Korrektur hätte ich wieder Stunden gebraucht 😉

Aber warum gibt er mir in der Ausgabe nicht die Summe zurück sondern immer nur die letzte Eingabe?
 
Zuletzt bearbeitet:
Macht er doch gar nicht. Hast du mein Programm mal laufen lassen? Das gibt die korrekte Summe zurück. Dein Fehler liegt in
summe = number[0] + number[1] + number[2] + number[3] + number[4]
+ number[5] + number[6] + number[7] + number[8] + number[9];
 
> Aber warum gibt er mir in der Ausgabe nicht die Summe zurück sondern immer nur die letzte Eingabe?

auf welchen Code beziehst du dich denn?,
bei dem von 01irgendwas gibt's doch sicher keinen Fehler mit der Summe,

bei deinem kann ja alles mögliche schief gehen, im ursprünglichen Post wurde summe nicht addiert sondern nach jeder Zahleneingabe neu gesetzt,
bzw. ein Array addiert, welches neu erzeugt wurde und daher nur die letzte Zahl enthielt

auch alles mit System.out.println herauszufinden, schaue dir doch alle 10 Positionen des Arrays an
 
Oh man wie doof... Immer diese kleinen simplen Fehlerchen..😳

Oh mann, das kenn' ich nur zu gut...

Das Programm von 0001001 hab ich nicht ausprobiert. Aber deine Art (array[1] + array[2] ... etc) funktioniert bei mir.
Ich hab da noch ein paar Änderungen gemacht. Aber im Grunde ist das dein Code. Soll ich hier nochmal posten?

Gruß,
Michael
 
Danke 0001001.
Ich hatte bei Deinem Code das "Aufsummieren korrigiert" überlesen😳
Nun funktionierts soweit wie es erstmal soll.

@X5-599
Bin immer für Code offen 😉. Bei mir hatte es mit array[0] + array[1] +... nicht funktioniert.

@SlaterB
Wie oben geschrieben hatte ich das korrigierte Aufsummen überlesen und nur meinen Code korrigiert. Daher fehlte der Teil noch.

Schrobi
 
Zuletzt bearbeitet:
ich bin einfach mal so frei...

Java:
import java.io.*;

public class Summation
{
	
	public static void main (String[] args) throws IOException
	{
		
		BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
		
        String inData;
        int zahl;
        int summe = 0; 
       	try
       	{
       		int wdh = 1;
       		int nCorrect   = 0;
       		int nIncorrect = 0;
       		int number[] = new int[10];
       		
    	  	while(wdh <= 10)
    	  	{
    	  		System.out.println("============================================");
			    System.out.println("Versuch Nr. " + wdh);
			    System.out.println("Korrekte Zahlen: " + nCorrect);
			    System.out.println("Inkorrekte Zahlen: " + nIncorrect);
			    System.out.println("============================================");
			    System.out.println("Geben Sie eine Zahl zwischen 1 und 10 ein:");
			    
			    inData = stdin.readLine();
	   		    zahl = Integer.parseInt( inData );
	       		
       		    if(zahl == 0)
       		    {
       		    	break;
       		    }
       		    else if((zahl >= 1) && (zahl <= 10))
       		    {
       				System.out.println("Richtig!");
       				number[nCorrect++] = zahl;
       				summe = number[0] + number[1] + number[2] + number[3] + number[4] 
       					  + number[5] + number[6] + number[7] + number[8] + number[9];
       			}
       		    else
       		    {       				
       				System.out.println("Falsch!");
       				nIncorrect++;
       			}
       			wdh++;
       		}
    	  	System.out.println("10 Versuche sind um!");
       		System.out.println("Summe: " + summe);	
       	}   
   		catch(NumberFormatException ex)
   		{
   	 		System.out.println("Bitte nur GANZE ZAHLEN eingeben!");
   	 		System.out.println("Starten Sie das Programm erneut!");
   		}	
	}
}

@All
Wie immer, wenn ihr etwas fundamental falsches seht --> Bitte darauf hinweisen. (Man lernt ja nie aus ...)

Gruß,
Michael
 
@X5-599
*STAUN*:applaus:
Wow.. ich freu mich echt schon auf den Zeitpunkt wo das Proggen richtig Spaß macht. Aber aller Anfang ist ja bekanntlich schwer...

Vielen vielen Dank. Werd mir das jetzt mal in den Kopf brennen und nachvollziehen

Schrobi
 
Kein Problem!

Wenn Fragen sind, immer raus damit. Aber nicht vergessen, hier gibt es viele die sich richtig auskennen. Ich betrachte mich immernoch als "lernender". Bei kleineren Sachen kann ich schonmal helfen(was mich jedesmal freut), aber da ich halt nicht DER Überflieger bin kann schonmal etwas nicht so tolles dabei sein. Gefährliches Halbwissen...
😉

Gruß,
Michael
 
warum eigentlich so unschön?
Java:
summe = number[0] + number[1] + number[2] + number[3] + number[4]  + number[5] + number[6] + number[7] + number[8] + number[9];
sowas wär doch schöner:
Java:
summe = 0;
for (int n : nummer) {
    summe += n;
}
 
Also mein fertiger Code sieht nun so aus:

Code:
import java.io.*;
 
 
public class Summation 
{
  	public static void main (String[] args) throws IOException 
  	{
		BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
	
    	String inData;
    	int zahl;
       	int summe = 0; 
       	try 
       	{
	   		int wdh = 0;
    	  	int nRichtig = 0;
    	  	int nFalsch = 0;
    	  	int number[] = new int[10];
    	  	
    	  	while(wdh < 10) 
    	  	{
				System.out.println("Geben Sie eine Zahl zwischen 1 und 10 ein:");
				System.out.println("\"0\" zum Beenden der Eingabe");
				
				inData = stdin.readLine();
   				zahl = Integer.parseInt( inData );
       		    
				int index = 0;
       		    
       		    
       		    if (zahl == 0) 
       		    {
       		    	break;
       		    } 
       		    else if ((zahl >= 0) && (zahl <= 10)) 
       		    {
       				System.out.println("Korrekt!");
       				index  = wdh;
       				number[index] = zahl;
       				summe = summe + zahl;
       				nRichtig++;
       			} 
       			else 
       			{       				
       				System.out.println("Falsch!");
       				nFalsch++;
       			}
       			wdh++;
       		}
       		System.out.println("Korrekte Eingaben: " + nRichtig);	  
       		System.out.println("Summe der korrekten Eingaben:" + summe);
       		System.out.println("Falsche Eingaben: " + nFalsch);	
       	}   
       	   		
   		catch (NumberFormatException ex ) {
   	 		System.out.println("Bitte nur GANZE ZAHLEN eingeben!" );
   	 		System.out.println("Starten Sie das Programm erneut!" );
   		}	
	}
}

Find den schon ganz gut so. Werd gleich noch Kommentieren und mich dann einer Aufgabe zu 2D-Arrays widmen.
Na wer hat Lust gleich zu helfen? 😉

Schrobi

PS: Danke nochmal an alle die hier mitgeholfen haben. Mein erster Eindruck von dem Forum ist echt super und ich habe nun wieder Hoffnung geschöpft doch noch irgendwann Programmieren zu können... 🙂

EDIT: Warum sieht mein Code denn nich so schön bunt aus wie Eurer? Habe doch die Code-Tags benutzt...:bahnhof:
 
du musst die "java" und nicht die "code" Tags verwenden 🙂 abgesehen davon kannst du deinen Code in der IDE schön und einfach formatieren, in Eclipse geht das mit [ctrl]+[shift]+[f]
 
Aah gut.. Hab die Java-Tags gefunden🙂

Benutze momentan JCreator. Hatte mir Netbeans runtergeladen aber kam damit irgendwie nicht zurecht.
Beim JCreator gibts sowas zum formatieren glaube ich nicht :bahnhof:

Schrobi
 
Hätte noch eine Frage an Euch.

Mir wurde einmal gesagt dass eine Main-Methode NIEMALS eine Exception werfen darf. Allerdings ist das mit der Exception überall auch in der Fachliteratur und im Netz so zu finden wie ich es hier im Code geposted hatte. Wüsste auch nicht wie man es anders machen sollte...

Des weiteren Frage ich mich ob mein Try-Block nicht zu groß ist. Auch dort wurde mir mal gesagt, dass der Try-Block nur die kritischen Abschnitten covern soll.

Könnt Ihr mir dazu mehr sagen? Oder habe ich (mal wieder) etwas falsch verstanden und mein Programm ist so wie es jetzt ist ok.

Schrobi
 
Das mit der Exception in der Main Methode stimmt schon, denn was macht es für einen Sinn, ne Exception zu werfen, die nirgends mehr abgefangen wird (die Main Methode ist nunmal die "oberste" aller Methoden).

du kannst deine ganze Logik ja in ne Funktion auslagern und dort dann ne Exception werfen...
 
Hi,
danke für die Antwort.

Habe es nun so gelöst, dass der Try-Catch Block in einer eigenen Input-Methode steht. Somit wirft auch meine Main keine Exception mehr. Ich denke mal so ist es auch gedacht bei der Programmierung. Man lernt halt nie aus 🙂

Schrobi
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben