java程序读取和打印到文本文件使用扫描器



我正在尝试读取文本文件,然后在另一个文件中显示输出。我只能用扫描仪阅读。input.txt

3005045 7
3245436 0
7543536 3
8684383 -1

output.txt应该像

ID    Number of Bags   Total Cost
**    **************   **********

顾客支付20.50每袋如果袋是4或更少。如果袋子大于4,每袋支付15.50美元。但如果是0或负数,这个消息应该出现"错误:错误的袋子数量"。我执行了这个程序,但它只工作一次(只读取一行)

import java.util.*;
import java.io.*;
import java.io.IOException;
public class Bags {
public static void main(String []args) throws IOException {
    FileInputStream fileinput = new FileInputStream("input.txt");
    FileOutputStream fileoutput = new FileOutputStream("output.txt");
    Scanner infile = new Scanner(fileinput);
    PrintWriter pw = new PrintWriter(fileoutput);
    double total = 0, line = 0;
    int bags = 0, ID = 0, count = 0;
    pw.println("IDttNumber of BagstttTotal Cost");
    for(int i = bags; i >= 0; i++, count++){
        ID = infile.nextInt();
        i = infile.nextInt();
        if (i <= 0){
            pw.println(ID + "tError: Wrong Number of Bagsttt");
            break;
        }
        else if (i <= 4){
            total = (80.50)*i;
            pw.printf("%dtt%dtttt%.2f", ID, i, total);
            break;
        }
        else {
            total = ((80.50)*4)+((75.50)*(i-4));
            pw.printf("%dtt%dtttt%.2f", ID, i, total);
            break;
        }
    }
    infile.close();
    pw.close();
}
}

你不需要那个for循环。同时,你需要逐行阅读。下面是您的代码的快速修复:

public class Bags {
public static void main(String[] args) throws IOException {
    FileInputStream fileinput = new FileInputStream("input.txt");
    FileOutputStream fileoutput = new FileOutputStream("output.txt");
    Scanner infile = new Scanner(fileinput);
    PrintWriter pw = new PrintWriter(fileoutput);
    double total = 0, line = 0;
    int bags = 0, ID = 0, count = 0;
    pw.println("IDttNumber of BagstttTotal Cost");
    while(infile.hasNext()){
        ID = infile.nextInt();
        int i = infile.nextInt();
        if (i <= 0) {
            pw.println(ID + "nttError: Wrong Number of Bagsttt");
        } else if (i <= 4) {
            total = (80.50) * i;
            pw.printf("%dtt%dtttt%.2f", ID, i, total);
        } else {
            total = ((80.50) * 4) + ((75.50) * (i - 4));
            pw.printf("%dtt%dtttt%.2f", ID, i, total);
        }
    }
    infile.close();
    pw.close();
}
}

Output.txt

ID      Number of Bags                  Total Cost
3005045 7                               548.503245436
        Error: Wrong Number of Bags         
7543536 3                               241.508684383
        Error: Wrong Number of Bags         

您不应该使用i来保存"number of bags"。看i = infile.nextInt();这行。使用另一个变量,应该没问题。此外,你应该一直读到文件结束,所以你可能不能写一个for (int i = 0; i < n; i++)风格的循环。

毫无疑问,循环只能迭代一次。在每种情况下都有break

在这种情况下,你也不应该使用for循环,尤其是你现在使用它的方式。只要看看它,你的循环只会在这个条件i >= 0为假时结束,这意味着i必须是负的,但即使i将成为-1,像你输入的最后一个数字,它仍然会在迭代结束时增加,这要归功于i++,所以你最终会得到0 >= 0条件为真,所以循环会尝试再次迭代)

代替
while(scanner.hasNextInt())

这样,您将确保仅在有下一个要读取的文件时才从文件中读取int。只需使用预定义的bugs变量而不是i

另一件事是你没有在printf格式中包括行分隔符。在每个数字的末尾添加%n,不要使用t,但要指定每个数字的空间,如

pw.printf("%d %9d %40.2f%n",...);

相关内容

  • 没有找到相关文章

最新更新