0

ファイルから読み取り、別のファイルに出力する大きなプログラムに取り組んでいます。うまく印刷できそうですが、ラベルが必要です。私たちのプログラムは次のように出力します:

40851   50497   813082  1118366 1120629 
34400   45547   824439  1425116 1429306 
39249   48833   809627  1101561 1103908 
57939   67308   821564  1126250 1128620 
64000   76037   827086  1424632 1431210 
34200   40240   554391  767810  772107  
89310   101149  2351871 2971044 2980458 
84370   95851   2470295 3096137 3105516 
59700   71190   2290032 2905223 2909869 
67600   79212   2419095 3031704 3034002 
60200   71594   2348818 2969848 2972035 
46000   56050   824092  1300904 1303163 

次のように合計とラベルを出力する必要があります (数字は無視してください)。

ここに画像の説明を入力

コードは次のとおりです。

package hotelreport;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Date;
import java.util.Scanner;

public class HotelReport {

    static File hotelFile = new File("store.txt");
    static Path outputFilePath = Paths.get("storeAnswer.txt");
    static int  invoiceID;
    static int serviceCode;
    static String invoiceDate;
    static double saleAmount;
    static int rows = 13;
    static int columns = 6;
    static int[][] table;

    public static void main(String[]args){

            getData();
            PrintWriter out;
            File file = new File("storeAnswer.txt");

            try {
                out = new PrintWriter("storeAnswer.txt");
                for(int i =0;i<=11;i++){
                    for(int j=0;j<=4;j++){
                        out.print(table[i][j]);
                        out.print("\t");
                    }
                    out.println("");
                }
                out.close();
            } catch (FileNotFoundException e) {
                System.out.println("File not found");
            }



    }

    public static void getData(){
        table = new int[rows][columns];

        try {
            Scanner sc = new Scanner(hotelFile);

            while(sc.hasNext()){
                invoiceID = sc.nextInt();
                serviceCode = sc.nextInt();
                String invoiceDate = sc.next();
                saleAmount = sc.nextDouble();
                switch(serviceCode){
                    case 0: 
                        if(invoiceDate.startsWith("01")){
                            table[0][0]+=saleAmount;
                        }else if(invoiceDate.startsWith("02")){
                            table[1][0]+=saleAmount;
                        }else if(invoiceDate.startsWith("03")){
                            table[2][0]+=saleAmount;
                        }else if(invoiceDate.startsWith("04")){
                            table[3][0]+=saleAmount;
                        }else if(invoiceDate.startsWith("05")){
                            table[4][0]+=saleAmount;
                        }else if(invoiceDate.startsWith("06")){
                            table[5][0]+=saleAmount;
                        }else if(invoiceDate.startsWith("07")){
                            table[6][0]+=saleAmount;
                        }else if(invoiceDate.startsWith("08")){
                            table[7][0]+=saleAmount;
                        }else if(invoiceDate.startsWith("09")){
                            table[8][0]+=saleAmount;
                        }else if(invoiceDate.startsWith("10")){
                            table[9][0]+=saleAmount;
                        }else if(invoiceDate.startsWith("11")){
                            table[10][0]+=saleAmount;
                        }else if(invoiceDate.startsWith("12")){
                            table[11][0]+=saleAmount;
                        };
                    case 1:
                        if(invoiceDate.startsWith("01")){
                            table[0][1]+=saleAmount;
                        }else if(invoiceDate.startsWith("02")){
                            table[1][1]+=saleAmount;
                        }else if(invoiceDate.startsWith("03")){
                            table[2][1]+=saleAmount;
                        }else if(invoiceDate.startsWith("04")){
                            table[3][1]+=saleAmount;
                        }else if(invoiceDate.startsWith("05")){
                            table[4][1]+=saleAmount;
                        }else if(invoiceDate.startsWith("06")){
                            table[5][1]+=saleAmount;
                        }else if(invoiceDate.startsWith("07")){
                            table[6][1]+=saleAmount;
                        }else if(invoiceDate.startsWith("08")){
                            table[7][1]+=saleAmount;
                        }else if(invoiceDate.startsWith("09")){
                            table[8][1]+=saleAmount;
                        }else if(invoiceDate.startsWith("10")){
                            table[9][1]+=saleAmount;
                        }else if(invoiceDate.startsWith("11")){
                            table[10][1]+=saleAmount;
                        }else if(invoiceDate.startsWith("12")){
                            table[11][1]+=saleAmount;
                        };
                    case 2:
                        if(invoiceDate.startsWith("01")){
                            table[0][2]+=saleAmount;
                        }else if(invoiceDate.startsWith("02")){
                            table[1][2]+=saleAmount;
                        }else if(invoiceDate.startsWith("03")){
                            table[2][2]+=saleAmount;
                        }else if(invoiceDate.startsWith("04")){
                            table[3][2]+=saleAmount;
                        }else if(invoiceDate.startsWith("05")){
                            table[4][2]+=saleAmount;
                        }else if(invoiceDate.startsWith("06")){
                            table[5][2]+=saleAmount;
                        }else if(invoiceDate.startsWith("07")){
                            table[6][2]+=saleAmount;
                        }else if(invoiceDate.startsWith("08")){
                            table[7][2]+=saleAmount;
                        }else if(invoiceDate.startsWith("09")){
                            table[8][2]+=saleAmount;
                        }else if(invoiceDate.startsWith("10")){
                            table[9][2]+=saleAmount;
                        }else if(invoiceDate.startsWith("11")){
                            table[10][2]+=saleAmount;
                        }else if(invoiceDate.startsWith("12")){
                            table[11][2]+=saleAmount;
                        };
                    case 3:
                        if(invoiceDate.startsWith("01")){
                            table[0][3]+=saleAmount;
                        }else if(invoiceDate.startsWith("02")){
                            table[1][3]+=saleAmount;
                        }else if(invoiceDate.startsWith("03")){
                            table[2][3]+=saleAmount;
                        }else if(invoiceDate.startsWith("04")){
                            table[3][3]+=saleAmount;
                        }else if(invoiceDate.startsWith("05")){
                            table[4][3]+=saleAmount;
                        }else if(invoiceDate.startsWith("06")){
                            table[5][3]+=saleAmount;
                        }else if(invoiceDate.startsWith("07")){
                            table[6][3]+=saleAmount;
                        }else if(invoiceDate.startsWith("08")){
                            table[7][3]+=saleAmount;
                        }else if(invoiceDate.startsWith("09")){
                            table[8][3]+=saleAmount;
                        }else if(invoiceDate.startsWith("10")){
                            table[9][3]+=saleAmount;
                        }else if(invoiceDate.startsWith("11")){
                            table[10][3]+=saleAmount;
                        }else if(invoiceDate.startsWith("12")){
                            table[11][3]+=saleAmount;
                        };
                    case 4:
                        if(invoiceDate.startsWith("01")){
                            table[0][4]+=saleAmount;
                        }else if(invoiceDate.startsWith("02")){
                            table[1][4]+=saleAmount;
                        }else if(invoiceDate.startsWith("03")){
                            table[2][4]+=saleAmount;
                        }else if(invoiceDate.startsWith("04")){
                            table[3][4]+=saleAmount;
                        }else if(invoiceDate.startsWith("05")){
                            table[4][4]+=saleAmount;
                        }else if(invoiceDate.startsWith("06")){
                            table[5][4]+=saleAmount;
                        }else if(invoiceDate.startsWith("07")){
                            table[6][4]+=saleAmount;
                        }else if(invoiceDate.startsWith("08")){
                            table[7][4]+=saleAmount;
                        }else if(invoiceDate.startsWith("09")){
                            table[8][4]+=saleAmount;
                        }else if(invoiceDate.startsWith("10")){
                            table[9][4]+=saleAmount;
                        }else if(invoiceDate.startsWith("11")){
                            table[10][4]+=saleAmount;
                        }else if(invoiceDate.startsWith("12")){
                            table[11][4]+=saleAmount;
                        };


                }
            }

        } catch (FileNotFoundException e) {
            System.out.println("File not found. Check Location");
        } catch (IOException e1) {
            System.out.println("File coud not be created");
        }
    }



}
4

1 に答える 1

1

印刷コマンド (out.print) を呼び出すたびに、各値で印刷する内容を変更するだけです。

無関係ですが、もしあなたがやっているなら:

                    if(invoiceDate.startsWith("01")){
                        table[0][0]+=saleAmount;
                    }else if(invoiceDate.startsWith("02")){
                        table[1][0]+=saleAmount;
                    }else if(invoiceDate.startsWith("03")){
                        table[2][0]+=saleAmount;
                    }else if(invoiceDate.startsWith("04")){
                        table[3][0]+=saleAmount;
                    }else ...

ループを使用しないのはなぜですか?:

for (int i=0; i<12; i++) {
    if (invoiceDate.startsWith("0" + (i + 1)) {
        table[i][0]+=saleAmount;
    }
}

もちろん、さらに改善する必要があるかもしれませんが、それは少なくとも最初の一歩です。

編集:

ああ、テーブルを追加したので、もう少し理にかなっています。ほとんどの場合、データのループの後に月を追加し (新しい行を印刷する場所)、列の値を最初に印刷します。

于 2013-05-03T23:59:34.203 に答える