Quardratzahlen

Status
Nicht offen für weitere Antworten.

Cjava

Mitglied
Hi!
Code:
/* 

	Übung 20


	Schreiben Sie die Zahlen von 1 bis 1000 und die jeweils zugehörige Quadratzahl in eine Datei "quadratzahlen.dat".

	Lesen Sie die Werte wieder ein und geben die Daten in folgender Weise aus:
	. . .
	Quadrat von 25 = 625
	Quadrat von 26 = 676
	. . . 
*/

import java.io.*;

public class Uebung20
{
	public static void main(String[] args)
	{
	
	try
	{
	RandomAccessFile file = new RandomAccessFile("quadratzahlen.dat", "rw");
	
	for (int i = 0; i <= 1000; i++)
	{
	file.writeInt(i);
	file.writeLong(i*i);
	}

		
	file.seek(0);	// Pointer wird auf Dateianfang gesetzt.
	
	for (int j = 0; j < file.length(); j = j + 12)
	{
		System.out.println(" Die Quadratzahl von " + file.readInt() + " ist " + file.readLong());
	}

	file.close();
	}
		
	catch (FileNotFoundException fnf)
	{
		System.out.println(fnf.getMessage());
	}

	catch (IOException io)
	{
		System.out.println(io.getMessage());
	}



	}
}

Das ist soweit mein Code. Funktioniert eigentlich alles, nur zeigt mir das Programm nur die Quardratzahlen ab 703 an.
Kann mir jemand bitte sagen, was ich (mal wieder) falsch gemacht habe?
 
S

SlaterB

Gast
der Code ist korrekt, vielleicht kann sich dein Ausgabefenster nicht so viele Daten merken und zeigt nur die letzten 300 an ;)

Eclipse-Konsole?
rechte Maustaste drauf, Preferences, Console Buffer Size erhöhen
 

sayang

Aktives Mitglied
Die DOS-Konsole hat auch nur einnen begrenzten Puffer. Klick mal mit rechts auf diesen Titelbalken, dann Eigenschaften, Reiter Layout. Da musst du bei Fensterpuffergröße den Wert erhöhen. IMO ist 300 der Standard, was zu deiner Aussage "ab 703" passt.

Lg
sayang
 
S

SlaterB

Gast
guter Trick ganz allgemein:
am Anfang
System.out.println("jetzt gehts los");
wenn das nicht da ist, dann fehlt was
 

musiKk

Top Contributor
Sonst probier mal
Code:
dein_programmaufruf > ausgabe.txt
Dann wird alles, was normalerweise auf der Konsole landen würde, in die Textdatei umgeleitet.
 
S

SlaterB

Gast
zu deiner neuen Frage im geschlossenen gleichlautenden Topic:

> for (int j = 0; j < file.length(); j++)
> {
> System.out.println("Quadrat von " + file.readInt() + "ist " + file.readLong());
> }

gib doch file.length() in die Konsole aus,
das wird nicht genau 1000 sein, sondern die Anzahl der Bytes der Datei
 

Cjava

Mitglied
for (int j = 0; j < file.length(); j = j +12)

wenn ich anstatt j++, j = j + 12 mache, verschwindet das NULL zum Schluss.
Kannst du mir vieleicht erklären, woher das NULL kommt, und was das +12 genau bezweckt?
 
S

SlaterB

Gast
wenn du 1000 int zu je 4 Byte und 1000 long zu je 8 Byte schreibst, ist file.length() am Ende 12.000

du durchläufst die Schleife also 12.000x, bei den den ersten 1000 kommt noch die normale Zahl-Ausgabe,
danach NULL, weil mehr als 1000x kann sich das File keine neuen Zahlen ausdenken,

mit j+12 verringerst du die 12.000 wiederum auf 1000 Schleifendurchläufe,
da wäre es aber schlauer, einfach von 1 bis 1000 zu iterieren,

klappt natürlich nur wenn man weiß, dass genau 1000 Zahlenpaare drin sind
 
Status
Nicht offen für weitere Antworten.

Oben