# Arrays (Hausaufgabe)



## anfänger2012 (25. Nov 2011)

Hallo zusammen  ,


Ich habe die folgende Hausaufgabe:


Ich soll ein Java-Programm schreiben, das zur Datei 20numbers.txt eine Statistik
erstellt, wie oft welche der Zahlen zwischen 0 und 9 vorkommen. Lösen Sie die Aufgabe
mit Hilfe eines Arrays der Länge 10 (für die 10 möglichen Zahlen).

In der 20Numbers.txt datei befinden sich 20 zufällige zahlen....
Also mit In.readInt() kann ich ja schonmal eine Zahl lesen....

Ich habe 20 Zahlen und soll aber ein Array der länge 10 benutzen ???:L  ;(



Die Aufgabe bringt mich voll durcheinander ...


ich hoffe ihr könnt mir helfen :toll:


----------



## Gast2 (25. Nov 2011)

Die 20 Zahlen liegen im Bereich 0 bis 9, also reicht dir ein Array der Größe 10 aus.
Lös das ganze zunächst einfach mal auf dem Papier und versuch das dann in Programmcode zu übersetzen.


----------



## Fab1 (25. Nov 2011)

> wie oft welche der Zahlen zwischen 0 und 9 vorkommen



In der 20Numbers.txt datei befinden sich 20 zufällige Zahlen, aber all diese Zahlen bestehen ja aus 0-9.

Wenn du zum Beispiel das Array mit Länge 10 hast. Repräsentiert die der Index 4 des Arrays die Zahl "4" und die allerdings musst du in dem Array mit dem Index 4 die Anzahl der Vierer speichern.

Zum Beispiel:


```
String text = "010144010144"
int []array = new int[10]; // Array mit der Länge 10
array[4] = Anzahl aller Vierer im String;
```

So in der Art sollte die Aufgabe aussehen von der Logik her. Dies musst du jetzt natürlich noch auf deine Textdatei beziehen. Sofern die Textdatei nur eine Zeile hat. Ganze Zeile einlesen, in einem String speichern und mit charAt(x) den String durchlaufen und auf die Anzahl der entsprechenden Ziffern prüfen. Diese anschließend im Array speichern.

Edit: als ich geschaut hab, gab es noch keinen Vorposter


----------



## anfänger2012 (25. Nov 2011)

@eikeb

könntest du mir das bitte bisschen erklären ???

ich habe ja das buch "Sprechen sie Java", aber das bringt mir leider bei dieser aufgabe gerade 
nicht viel...

ist der ansatz schonmal richtig ???



> int[] i;
> i = new int[10];
> i[] = In.readInt();



also ich erstelle erstmal eine array und lese dann die zahlen mit In.readInt()  ....
speichert es dann von alleine die zahlen hintereinander in die arrays ???

ufff so viele fragen??? :L


....


----------



## anfänger2012 (25. Nov 2011)

@fab1


wenn ich array[4] schreibe...sucht er danns sich die 4 im text datei ???


---


----------



## Fab1 (25. Nov 2011)

Du musst erstmal die Anzahl der Zahlen ermitteln. Dies machst du am besten mit einer Schleife, die den Text von dir durchlauft. Zum Test mach es erst mal für eine Zahl zum Beispiel die "0" anschließend kannst du das mit den restlichen Zahlen machen. Ist oft etwas leichter.

Du musst bei i[0] = DieAnzahlDerNullen speichern. Diese musst du erst mal raus finden.



> wenn ich array[4] schreibe...sucht er danns sich die 4 im text datei ???



Nein. Das heißt nur, dass du in dem Array mit dem Index 4 irgendetwas speicherst.


----------



## Fab1 (25. Nov 2011)

Vielleicht hilft die das bei der Erklärung zu den Arrays ein bisschen weiter.


```
public class Test {

	
	public static void main(String[]args ){
		
		int zahl1 = 0;
		int zahl2 = 0;
		int zahl3 = 0;
		int zahl4 = 0;

		
		System.out.println(zahl1); // geb jetzt mal nur eine Zahl aus.
		System.out.println("Das waren die normalen Variablen.");
		//könnte man mithilfe eines Arrays so schreiben

		int [] zahlen = new int [4];
		
		int index = 0;
		int x = 0;
		while(index < zahlen.length){  // länge des Arrays
			zahlen[index] = 0;
			System.out.println(zahlen[index]);
			index++;
			
		}
		System.out.println("Und das war das Array");
	}
}
```


----------



## anfänger2012 (25. Nov 2011)

--------------

Beispiel:

schleife{

(...)

i[0] = In.readInt(0);

(...)

}

jetzt sucht er ja nach nullen im text.... doch sagen wir mal er findet jetzt 3 nullen. er würde doch dann nur 
eine null speichern könne,da  i[0] ja nur ein speicherplatz ist oder ?


----
EDIT:
hab dein post erst jetzt gesehen


----------



## Fab1 (25. Nov 2011)

> och sagen wir mal er findet jetzt 3 nullen. er würde doch dann nur
> eine null speichern könne, I[0] ja nur ein speicherplatz ist oder ?



Das Array ist ja vom Typ int. Somit kannst du in dem Array auch alle Zahlen speichern die in int vorkommen.

Kannst du dir so vorstellen.

du hast einen String = "aabba";
jetzt sollst du in einem Array im Index 0 also i[0] die Anzahl der Buchstaben "A" speichern, also 3.

somit würde:


```
System.out.println(i[0]);
```

3 ergeben.


----------



## anfänger2012 (25. Nov 2011)

*DANKE* *!!!!  *:toll:   :applaus: :toll:


----------



## anfänger2012 (25. Nov 2011)

hallo,

bekomme die folgende fehermeldung :

method readInt in class In cannot be applied to given types:

zahlen[index] = In.readInt(index);

required: no arguments


*ist meine einzige fehlermeldung gerade...*


----------



## anfänger2012 (25. Nov 2011)

ich versuch es die ganze zeit , aber finde leider keine lösung... ich hoffe einer kann mir helfen ...


----------



## Marcinek (26. Nov 2011)

Hi,

Ich würde ein Buch nehmen und die Basics lernen. Oder du nimmst dir Nachhilfe. Schreibe mir eine Pm. Da kann man bestimmt was machen. 

Gg


----------



## anfänger2012 (26. Nov 2011)

Ich hab ja das Buch "Sprechen sie Java?" .... aber das bringt mir gerade leider gar nichts...

wie könnte ich es dann machen ,wenn es mit zahlen[index] = In.readInt(index); nicht
geht...

also wie könnte ich zum beispiel nach der anzahl der  0 oder 1 im datei suchen ???


----------



## Marcinek (26. Nov 2011)

Mit einer Whileschleife über den index 

sowas:

```
while ( In.readInt(Index) != null) {
   int i = In.readInt(index); 
   
   if( i == 0) { sysout("habe eine 0 gefunden"); }

    Index++;
}
```


----------



## Gassst (26. Nov 2011)

Marcinek hat gesagt.:


> Mit einer Whileschleife über den index


 Welchen index überhaupt? Zwischen 0 und 9 ?

Dein Code ist außerdem quatsch, warum habe ich hier aufgeschrieben. Wenn du nicht helfen kannst, solltest du vielleicht am besten gar keinen Code posten um den Anfänger noch nicht mehr zu verwirren/reinzureiten:



> while ( In.readInt(Index) != null) {
> int i = In.readInt(index);


Wie passt das zusammen?


> while ( In.readInt(Index) != null)


Das alleine macht auch keinen Sinn


> In.readInt(index)


Es gibt auch offensichtlich keine Methode readInt(int):


			
				anfänger2012 hat gesagt.:
			
		

> method readInt in class In cannot be applied to given types:
> zahlen[index] = In.readInt(index);
> required: no arguments





> if( i == 0) { sysout("habe eine 0 gefunden"); }
> Index++;


Gesucht ist nach der Anzahl der jeweiligen Ziffer.

@anfänger2012:


> also wie könnte ich zum beispiel nach der anzahl der 0 oder 1 im datei suchen ???


Gar nicht, das ist nämlich auch gar nicht die Aufgabe. Du sollst zählen wie oft jede Ziffer vorkommt, nicht nach Ziffern suchen - mit diesem Ansatz kommst du also nicht weiter. Also überlege erstmal nach einem anderen Ansatz, bevor du oder wir hier überhaupt mit programmieren _anfangen_. Außerdem gibt dir die Aufgabenstellung schon vor, dass du ein Array mit Länge 10 benutzen sollst und eine Methode existiert In.readInt(), die dir die nächste Zahl ausliest und zurückgibt - mit den beiden Informationen sollte die Lösung eigentlich auf der Hand liegen - wenn du verstanden hast wie das funktionieren soll kansnt du ja nochmal fragen, wenn du Problem beim codieren hast.


----------



## anfänger2012 (26. Nov 2011)

@Gassst ---

ja ich habe jetzt gemerkt das, dass mit In.readInt(index) nicht geht 


ich will das jetzt mit einer if- anweisung versuchen ... also wenn er jetzt z.b. die 0 findet soll er es mir ausgeben und  dann das gleiche mit 1 usw. 


ich werde es heut abend versuchen.... denn ich muss jetzt arbeiten gehen ( ;( )   (studentenjob halt )


----------



## Marcinek (26. Nov 2011)

> Zitat: Marcinek
> 
> Beitrag anzeigen
> 
> ...



Dann poste du doch den korrekten Code. Mein Code ist immer Pseudocode und dieser Hinweis steht in meiner Signatur. Ich arbeite hier mit den ELementen, die auch anfänger nutzt und er muss halt sehen, dass er diesen Tipp auf sein Problem transferiwert bekommt. 




> Zitat:
> 
> 
> 
> ...



Nun offensichtlich hast du noch nie eine Datei unbekannter Länge geparst. Ich habe hier die "blöde" Variante genommen um den TO nicht mit verschachtelten zuweiseungen und vergleichen zu veriwrren.



> Zitat:
> 
> 
> 
> ...



Warum macht das keinen Sinn? - Natürlich macht das einen Sinn. Wenn ich außerhalb des index lese erwarte ich eine null oder sowas. Da wir hier offensichtlich ein Schüler Framework haben, dass viele Ereignisse zusammenfasst?



> Zitat:
> 
> 
> 
> ...





> Gesucht ist nach der Anzahl der jeweiligen Ziffer.



Sehe ich nicht, warum das hier so offensichtlich ist. Wenn der TO nicht in der Lage ist hier festzustellen ob er eine Methode verwendet, die nicht existiert, was soll ich machen?

Index hat der TO eingeführt und da wird er sicherlich sehen wie man es verwendet. Nach meinem Posting war der TO laut seiner PM, die ich hier nicht schreiben will, viel näher am Ergebnis, als das er nach deinem Posting jemals sein wird  - Ist so.


----------



## Gassst (26. Nov 2011)

Du hast meine Kritik an deinem Code offensichtlich nicht verstanden. Ich werde nochmal versuchen dir zu zeigen, warum dein Code Quatsch war. Einen richtigen Code werde ich nicht einstellen, weil das die Hausaufgabe des TO ist (darum ist es wohl auch in diesem Unterforum gelandet):



Marcinek hat gesagt.:


> Nun offensichtlich hast du noch nie eine Datei unbekannter Länge geparst. Ich habe hier die "blöde" Variante genommen um den TO nicht mit verschachtelten zuweiseungen und vergleichen zu veriwrren.
> 
> Warum macht das keinen Sinn? - Natürlich macht das einen Sinn. Wenn ich außerhalb des index lese erwarte ich eine null oder sowas. Da wir hier offensichtlich ein Schüler Framework haben, dass viele Ereignisse zusammenfasst?


1. Einmal prüfst du den Rückgabewert auf null, dann speicherst du ihn in einem int, das ist es "was nicht zusammen passt"
2. Du redest von "Datei unbekannter Länge lesen", darum wahrscheinlich die while Schleife mit Überprüfung auf null, das macht allerdings keinen Sinn, wenn du den gelesenen Wert direkt wieder wegwirfst, statt zu speichern um auf ihm zu arbeiten...



> Sehe ich nicht, warum das hier so offensichtlich ist.


Inwiefern ist es nicht offensichtlich? Der TO hat doch sogar die Compilerfehlermeldung gepostet, aus welcher sich genau das ablesen lässt.


> Wenn der TO nicht in der Lage ist hier festzustellen ob er eine Methode verwendet, die nicht existiert, was soll ich machen?


Selbst wenn der TO das selbst aus der Compilermeldung nicht ablesen konnte (hat er ja sogar inzwischen, laut seinem letzten Post), ist das kein Grund, dass du, jemand der sich hier zutraut helfen zu sollen, diese Methode noch weiterbenutzt.



> Nach meinem Posting war der TO laut seiner PM, die ich hier nicht schreiben will, viel näher am Ergebnis, als das er nach deinem Posting jemals sein wird  - Ist so.


Falsch, dein Beispiel war kontraproduktiv zur Lösung. Unter der Prämisse, dass Index von 0-9 läuft (so wie der TO die variable eingeführt hat) und dass eine Methode readInt(int) existiert, welche eine Datei durchsucht nach der übergebenen Zahl ("index") und dann die übergebene Zahl wieder zurückliefert (???) und dass der Vergleich mit != null funktionieren würde, macht dein Code einfach nichts sinnvolles, er würde maximal einmal "habe eine X gefunden" ausgeben für jedes zweite X ("index"). Der Code (auch wenn es Pseudocode sein soll) hat halt nichts mit der Aufgabenstellung zu tun. Dass der TO glaubt er wär damit näher an der Lösung dran kauf ich dir sogar ab, mit den Tatsachen hat das allerdings nichts zu tun, da der TO die Aufgabenstellung und den Weg dahin, genauso wie du, noch nicht verstanden hat.


----------



## Marcinek (26. Nov 2011)

Du hast meinen Code nicht verstanden. Das belegt deine erste Äußerung zu meinem Code. 

Edit: Ich prüfe ob eine Zahl an INdex ungleich null ist nud wenn nein, dann lese ich diese Zahl nochmal. Wie bereits geschrieben spare ich mir dem TO meine Überlegenheit zu zeigen indem ich hier ein Klammernkonstrukt mache, dass dies in einem Schritt speichert und zuweist.

Schlussendlich haben wir beide nun jeweils zwei Postings geschrieben, die den TO nicht weiterbingen. Zudem dein Posting zudem noch schlichtweg ohne Argumente dasteht und ein weiterer Grund dafür wäre wieso Gäst hier nicht posten sollten.

Achja: Es bleibt dennoch der Fakt, dass der TO mir ein Beispiel geschickt hat in der er meine IDee (mehr war es nicht) umgesetzt hat.


----------



## Gassst (26. Nov 2011)

> Du hast meinen Code nicht verstanden. Das belegt deine erste Äußerung zu meinem Code.
> 
> Ich könnte dir die Lösung sagen, aber die würdest du auch nicht verstehen


Ganz schon arrogant von dir so daherzureden und damit zu versuchen dich einer Auseinandersetzung mit deinem falschen Code zu entgehen, meinst du nicht? Ist auch nicht so als ob ich eine Entschuldigung von dir fordern würde oder sonst eine sinnvolle Antwort auf meinen Post, ich habe deinen Code lediglich zu Gunsten des TO auseinandergenommen - kein Grund so frech zu werden - besonders wenn man es nicht besser weiß.



Marcinek hat gesagt.:


> Edit: Ich prüfe ob eine Zahl an INdex ungleich null ist nud wenn nein, dann lese ich diese Zahl nochmal.


Damit hast zu schonmal gleich zwei weitere Verständnisprobleme:
a) der "Index" den Fab1/TO eingeführt haben ist der index seines Arrays und läuft von 0-9! Und hat überhaupt nichts mit einem Offset in der Datei zu tun, wie du offensichtlich erwartest.
b) so wie TO readInt(int) bisher benutzt hat ist offensichtlich, dass er eben diese Zahlen 0-9 der Methode übergibt zum "suchen" und keinen Dateiindex
Von der letzten Tatsache nochmal abgesehen, dass es überhaupt gar kein readInt(int) gibt, und somit beide Ansätze schon von Grund auf nicht zur Lösung führen können.



> Schlussendlich haben wir beide nun jeweils zwei Postings geschrieben, die den TO nicht weiterbingen. Zudem dein Posting zudem noch schlichtweg ohne Argumente dasteht und ein weiterer Grund dafür wäre wieso Gäst hier nicht posten sollten.


Ich finde mein Post hat dem TO insofern weitergeholfen, als dass er jetzt keine Zeit mehr fruchtlos investieren muss deinen Code zu verstehen oder das Problem auf deinem Weg zu lösen.
Inwiefern meinen Posts Argumente fehlen kann ich nicht nachvollziehen: Ich habe dir zwei mal deinen Code Zeile für Zeile auseinandergenommen und sachlich erklärt was daran falsch ist und was er eigentlich macht. Dann so arrogant daherzureden und _dann_ versuchen das in eine Debatte gegen Gästeposts zu führen ist auch höchst ironisch.


----------



## anfänger2012 (27. Nov 2011)

@gassst 

ich hoffe mal du bist noch da 

ich kann leider gerade den code nicht posten, da auch andere studenten hier unterwegs sind
und einfach den code kopieren könnten....  


aber ich habe das problem das mein programm zwar die erste zahl richtig ausgibt (also die 0),
aber dann abbricht....


schleife{

variable [p] = In.readInt();

if(In.readInt() == variable);
Out.print(variable [p] );

  p++;


das war fast schon zuviel code...
--


Edit:

ich habs glaube ich gar nicht verstanden.. ;(

ich habe nur 20 zahlen aber als ergebnis bekomme ich 
3 4 4 2 7 9 8 1 9 1

.


----------



## Marcinek (27. Nov 2011)

Und so?


```
class Statistics {
 
  public static void main (String[] args) {
    
    
   In.open("20Numbers.txt");
   
   int[] zahlen = new int[10];
   int zahl = 0;
   
   for(int i = 0; i < zahlen.length; i++) {
	   zahlen[i] = 0;
   }
  
   while((zahl = In.readInt()) != null){
     zahlen[zahl]++;   
   }

   for(int i = 0; i < zahlen.length; i++) {
	   System.out.println(String.format("Anzahl von %d ist %d", i, zahlen[i]));
   }
   
   In.close(); 
  }
  
}
```

Vorraussetzung hier ist, dass in der Datei die Zahlen 0--9 vorkommen und nicht "21" am Stück.


----------



## anfänger2012 (27. Nov 2011)

es sind nur zahlen zwischen 0-9 ---- ich werde es mal gleich probieren...


----------



## Marcinek (27. Nov 2011)

Im übrigen brauchst du dir keine Gedanken zu machen, dass diesen Thread auch nur einer deiner Komilitonen findet:

http://www.java-forum.org/java-basics-anfaenger-themen/127846-datei-lesen.html

Ihr könnt nichtmal google nutzten für die einfachen Sachen ;D

Als Student wirst du lernen müssen, wie man an Informationen effizient kommt -.-

Wieso sertr uhr euch nicht zusammen. Gibt jemanden (zum Beispiel mir) Geld und in einer Stunde TS Nachhilfe versteht ihr, was ihr da macht?


----------



## anfänger2012 (27. Nov 2011)

er hat es ja erst später erstellt , außerdem ist er noch bei der aufgabe b .... aufgabe b war ja kein problem.

nur das mit arrays verstehe ich einfach nicht ... meiner meinung nach müsste z.b. das programm was ich da oben gepostet habe
eigentlich funktionieren....


variable [p] = In.readInt();

if(In.readInt() == p);
Out.print(variable [p] );


wenn z.b. p = 3 ist dann müsste er mir in diesem fall doch es richtig ausgeben....
oben erhöhe ich ja auch p immer mit p++ 

komisch...
----


----------



## Marcinek (27. Nov 2011)

Finde ich nicht komisch.

KA wo du was erhöhst. Aber mit sysout ( ...) gibt man sachen nur aus.

Außerdem rufst du zweimal readInt () auf. Und das geht dann eine Zahl weiter.


----------



## anfänger2012 (27. Nov 2011)

> Außerdem rufst du zweimal readInt () auf. Und das geht dann eine Zahl weiter.



sagen wir mal ich habe die folgende datei:

4 2 8 4 9  (1.Zeile)
7 8 5 9 3 5 7  (2.Zeile)
4 7 8 9   (3.Zeile)


würde dann z.b. mein *readLine()*  automatisch bei jeder schleifendurchlauf
in die nächste zeile springen ???
habe ich ich es richtig verstanden ??


...


----------



## Marcinek (27. Nov 2011)

jop

Wobei Du trainieren solltest solche Fragen selber zu klären.


----------



## anfänger2012 (27. Nov 2011)

kann ich *BITTE* hier jemanden privat anschreiben und mein code zeigen....
ich will es endlich lösen , sitzte schon seit zwei tagen an einer aufgabe ;(


----------



## Gasssst (27. Nov 2011)

Ich muss gerade auch die Aufgabe machen, würde mich freuen wenn einer helfen kann.

PS: Ich würde statt readInt  readLine benutzen, denn dann würde ich doch gleiche die ganze
Zeile lesen oder ?


Danke schonmal


----------



## Marcinek (27. Nov 2011)

Ich verstehe gerade nicht, was hier noch gemacht werden soll... Die Lösung zu der Aufgabe steht schon tim Thread?

Poste den Code doch hier. Dann kann geholfen werden. Als ob ein Tutor davon ausgehen würde, dass bei solchen Aufgaben jemand abschreiben muss  - Klausur kommt ehh und da kann man kein Forum nutzten.


----------

