簡體   English   中英

只輸出循環的最后一行

[英]Only outputting last line of loop

import java.io.*;
import java.util.Random;

public class LargeDataset {
public static void main(String[] args) throws Exception {
    File file = new File("src/Salary.txt");
    if (file.exists()) {
        System.out.print("Sorry this file already exists.");
        System.exit(0);
    }
    String firstName = "";
    String lastName = "";
    String rank = "";
    double salaryRange = 0.0;

    for (int i = 1; i <= 1000; i++) {
        try (PrintWriter output = new PrintWriter(file))
        {
            firstName = "FirstName" + i;
            lastName = "LastName" + i;
            rank = generateRandomRank();
            if (rank == "assistant")
                salaryRange = generateSalary(50000.00, 80000.00);
            else if (rank == "associate")
                salaryRange = generateSalary(60000.00, 110000.00);
            else
                salaryRange = generateSalary(75000.00, 130000.00);
            output.printf("%s %s %s $%.2f", firstName, lastName, rank, salaryRange);
            output.println();
        }
    }
}

public static String generateRandomRank() {
    String[] rank = {"assistant", "associate", "full"};
    Random random1 = new Random();
    return rank[random1.nextInt(3)];
}

public static double generateSalary(double minSalary, double maxSalary) {
    double randomSalary = minSalary + Math.random() * (maxSalary - minSalary);
    return randomSalary;
 }  
}

大家好。 我有一個程序可以生成 1000 行文本並將其保存到名為 Salary.txt 的文件中。 每行的格式為:firstNamei,lastNamei,一個隨機排名,以及一個適合該排名的隨機薪水。 但是,當我運行這個程序時,它只輸出循環的第 1000 行。 但是,我注意到,當我沒有將 PrintWriter 放在 try 語句中並在循環后自行關閉它時,它運行良好並生成所有 1000 行。 為什么它只根據現在的情況生成最后一行?

您應該打開PrintWriter一次,然后從循環中多次寫入,而不是相反:

try (PrintWriter output = new PrintWriter(file)) {
    for (int i = 1; i <= 1000; i++) {
        firstName = "FirstName" + i;
        lastName = "LastName" + i;
        rank = generateRandomRank();
        if (rank == "assistant")
            salaryRange = generateSalary(50000.00, 80000.00);
        else if (rank == "associate")
            salaryRange = generateSalary(60000.00, 110000.00);
        else
            salaryRange = generateSalary(75000.00, 130000.00);
        output.printf("%s %s %s $%.2f", firstName, lastName, rank, salaryRange);
        output.println();
    }
}

你應該使用上面的模式而不是你所擁有的。 如果您想要對當前代碼進行精確修復,那么您可以嘗試以附加模式打開PrintWriter

for (int i=1; i <= 1000; i++) {
    try (PrintWriter output = new PrintWriter(new FileOutputStream(file, true)) {
        // same logic
    }
}

這也應該有效,因為現在,即使您為循環的每次迭代創建一個新的PrintWriter (效率低下),您在追加模式下打開底層文件,因此每個新行都應該正確寫入。

每次迭代1000時,您都在創建一個新文件

for (int i = 1; i <= 1000; i++) {
    try (PrintWriter output = new PrintWriter(file))
    ...
}

在循環之前移動它

 try (PrintWriter output = new PrintWriter(file)) {
   for (int i = 1; i <= 1000; i++) {
   }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM