私は Java の学習を開始しましたが、コンテンツをnumbers.dat
ファイルに書き込む単純なプログラムに問題があります。
私は2つの問題に直面しています:
私が得ている出力は次のとおりです。
2、6、12、20、30、42、56、72、90、110、132、156、182、210、240、272、306、342、380、420、462、506、552、600、650、 702、756、812、870、930、992、1056、1122、1190、1260、1332、1406、1482、1560、1640、1722、1806、1892、1980、2070、2162、250、2525。 ..
それがいつあるべきか:
偶数の場合:
2,4,6,8,10,12,14,……,98,100
奇数の場合:
2,4,6,8,10,12,14,……,98,100,1,3,5,7,9,……..97,99
私の 2 番目の問題は、出力が
numbers.dat
ファイルに書き込まれていないことです。それはすべて空白です。
私が解決しようとしている本の質問は次のとおりです。
Numbers.dat という名前のファイルを作成する TextFileIO.java というプログラムを作成します。次に、1 から 100 までのすべての偶数の整数をコンマで区切って書き込むアルゴリズムを作成します。
ファイルが作成されたら、ファイルを閉じてから再度開き、結果を画面に表示します。結果が表示されたら、1 から 100 までの奇数の整数をコンマで区切ってファイルの末尾に追加します。ファイルを再度開き、結果を表示します。ファイルの内容は、カンマで区切られた 1 ~ 100 の偶数と、カンマで区切られた 1 ~ 100 の奇数が続く必要があります。このプログラムの出力は、次のようになります。
2,4,6,8,10,12,14,……,98,100
2,4,6,8,10,12,14,……,98,100,1,3,5,7,9,……..97,99
以下は、これまでに試したコードです。
textFileIO.java
package package1;
import java.io.*;
import java.util.*;
//class definition
public class textFileIO{
//The main function
public static void main(String args[]) {
//This declares a file to open.
File outFile = new File("numbers.dat");
int sumEven = 0;
int sumOdd = 0;
//File IO requires a try/catch block to prevent the program from crashing
try {
//a buffered writer is used to allow us to write to the file.
BufferedWriter writer = new BufferedWriter(new FileWriter(outFile));
//This for loop handles adding all of the numbers together
for(int i = 1; i < 100; i += 2) {
sumEven += i + 1;
writer.write("" + sumEven + ", ");
}
//adding a new line and closing the file
writer.newLine();
writer.close();
//A buffered Reader is used for reading a new file.
BufferedReader reader = new BufferedReader(new FileReader(outFile));
//Because I only add a new line at the end, I only need to read the first line.
System.out.println(reader.readLine());
//I need to write again, so I close the reader and open the writer.
reader.close();
//you need to create another object to append to the file
//writer.open();
BufferedWriter writer2 = new BufferedWriter(new FileWriter(outFile));
//This for loop is identical to the previous one, except for odd numbers
for(int i = 1; i < 100; i += 2) {
sumOdd += i;
writer2.write("" + sumOdd + ", ");
}
writer.newLine();
writer.close();
//The same here. You need to create another reader
//reader.open();
BufferedReader reader2 = new BufferedReader(new FileReader(outFile));
System.out.println(reader2.readLine());
}
catch (Exception e) {
}
}
}
編集 2
コードを変更しました。これが最新のコードです。私はまだ問題を抱えています。コンソールの出力画面に出力として 49 と 50 が表示され、numbers.dat ファイルにカンマ区切りの奇数のリストのみが表示されるようになりました。私は今何を間違っていますか?
import java.io.*;
import java.util.*;
public class TextFileIO {
public static void main(String[] args) throws Exception {
//Clear the contents of numbers.dat if already exists and populated
File fileOne = new File("numbers.dat");
fileOne.delete();
File newFile = new File("numbers.dat");
newFile.createNewFile();
//Create writer object
PrintWriter writer = new PrintWriter(new FileWriter("numbers.dat"));
//Loop from 1 to 100
for (int i = 1; i <= 100; i++) {
//If number is even, write to file
if (i % 2 == 0) {
writer.print(i + ",");
}
}
//Close writer object.
writer.close();
//Read from file
FileInputStream fileStream = new FileInputStream("numbers.dat");
DataInputStream in = new DataInputStream(fileStream);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
//Print line
System.out.println(reader.read());
reader.close();
//Write all odd numbers to file
PrintWriter writer2 = new PrintWriter(new FileWriter("numbers.dat"));
//Loop from 1 to 100
for (int i = 1; i <= 100; i++) {
//If number is odd, write to file
if (i % 2 == 1) {
writer2.print(i + ",");
}
}
writer2.close();
//Read from file
FileInputStream fileStream2 = new FileInputStream("numbers.dat");
DataInputStream in2 = new DataInputStream(fileStream2);
BufferedReader reader2 = new BufferedReader(new InputStreamReader(in2));
//Print line
System.out.println(reader2.read());
reader.close();
}
}
編集 3:目的の出力をまだ取得できません。私はまだコンソールで 49 と 50 として出力を取得しています。numbers.dat ファイルでは、出力はコンマで区切られた奇数のみです。コードで何を変更すればよいのか正確に理解できません。