一か月の労働状況(出勤日、労働開始時間、労働終了時間)を記してあるcsvを読み取り、一か月のバイト代を算出するプログラムを書きました。
java
1import java.io.BufferedReader; 2import java.io.File; 3import java.io.FileReader; 4import java.io.IOException; 5import java.sql.Date; 6import java.sql.Time; 7import java.util.ArrayList; 8import java.util.List; 9import java.lang.Math; 10 11public class ReadFileSample { 12 public static void main(String[] args) { 13 14 // WorkingResult.csvのパス ※「C:\WorkSpace」直下に配置していない場合は適宜変更してください。 15 final String WORKING_RESULT_FILE_PATH = "C:\WorkSpace\Java.El\Practice\Test2\WorkingResult.csv"; 16 // コンマ 17 final String COMMA = ","; 18 19 // 計算用の数値を定数で用意 20 final long ONE_HOUR_BY_MILLI_SEC = 1000 * 60 * 60; // 1時間のミリ秒換算 21 final long ONE_MIN_BY_MILLI_SEC = 1000 * 60; // 1分のミリ秒換算 22 final int ONE_HOUR_BY_MIN = 60; // 1時間の分換算 23 24 25 List<String> workingResults = new ArrayList<String>(); //ファイルから読み込んだデータを格納しておくArrayList 26 27 // WorkingResult.csvを読み込む 28 try { 29 // WorkingResult.csvの読み込み準備 30 File workingResultFile = new File(WORKING_RESULT_FILE_PATH); 31 BufferedReader br = new BufferedReader(new FileReader(workingResultFile)); 32 33 // WorkingResult.csvを1行ずつ読み込んでArrayListに格納する 34 String recode = br.readLine(); 35 while (recode != null) { 36 workingResults.add(recode); 37 recode = br.readLine(); 38 } 39 br.close(); 40 } catch (IOException e) { 41 System.out.println(e); 42 } 43 44 // ArrayListから1行ずつ取り出して日付/出勤時間/退勤時間に振り分け 45 for (int i = 0; i < workingResults.size() ; i++) { 46 47 String workingRecode = workingResults.get(i); // 1行ずつ文字列を取り出す 48 String[] forSplitRecode = workingRecode.split(COMMA); // splitメソッドを用いてカンマ区切りで文字列を分解&配列にそれぞれ格納 49 50 Date workingDate = Date.valueOf(forSplitRecode[0]); // 出勤日 51 Time startTime = Time.valueOf(forSplitRecode[1]); // 出勤時間 52 Time finishTime = Time.valueOf(forSplitRecode[2]); // 退勤時間 53 54 // getTimeメソッドを使って労働時間をミリ秒(0.001秒単位)で取得する 55 long workingTime = finishTime.getTime() - startTime.getTime(); 56 57 int day_wtm = (int)(workingTime/ONE_MIN_BY_MILLI_SEC) ; //働いた時間を分のみで表示 58 59 // ミリ秒で取得した労働時間を○時間△分の形式に直す 60 int workingHour = (int)( workingTime / ONE_HOUR_BY_MILLI_SEC ); // 時間に換算 61 int workingMin = (int)( ( workingTime / ONE_MIN_BY_MILLI_SEC ) % ONE_HOUR_BY_MIN ); // 分に換算 62 63 int real_wtm = 0; //real_wtmの初期化 64 int paycheck = 0; //paycheckの初期化 65 int paycheckPerHour = 900 ; 66 double paycheckPerMin = paycheckPerHour/60 ; 67 int sum_paycheck = 0; 68 69 if((6<=workingHour) && (workingHour<8)){ 70 real_wtm = day_wtm - 45 ; 71 paycheck = (int)Math.floor(real_wtm * paycheckPerMin) ; 72 73 }else if( 8<=workingHour ){ 74 real_wtm = day_wtm - 60 ; 75 76 if( real_wtm>8*60 ){ 77 int zngy_min = real_wtm - 8*60 ; 78 paycheck = (int)Math.floor( 8*60*paycheckPerMin ) + (int)Math.floor( zngy_min*paycheckPerMin*1.25 ) ; 79 80 }else{ 81 paycheck = (int)Math.floor( real_wtm*paycheckPerMin ) ; 82 } 83 84 }else{ 85 real_wtm = day_wtm ; 86 paycheck = (int)Math.floor(real_wtm * paycheckPerMin) ; 87 } 88 89 sum_paycheck = sum_paycheck + paycheck ; 90 91 } 92 93 System.out.println( "今月のお給料は" + sum_paycheck + "円です。" ); 94 System.out.println( "今月もお疲れ様でした。" ); 95 } 96}
これを実行すると以下のようなエラーがでてきました。
【エラー】-----------------
ReadFileSample.java:21: error: illegal escape character
final String WORKING_RESULT_FILE_PATH = "C:\WorkSpace\Java.El\Practice\Test2\WorkingResult.csv";
^
ReadFileSample.java:21: error: illegal escape character
final String WORKING_RESULT_FILE_PATH = "C:\WorkSpace\Java.El\Practice\Test2\WorkingResult.csv";
^
ReadFileSample.java:21: error: illegal escape character
final String WORKING_RESULT_FILE_PATH = "C:\WorkSpace\Java.El\Practice\Test2\WorkingResult.csv";
^
ReadFileSample.java:21: error: illegal escape character
final String WORKING_RESULT_FILE_PATH = "C:\WorkSpace\Java.El\Practice\Test2\WorkingResult.csv";
^
ReadFileSample.java:21: error: illegal escape character
final String WORKING_RESULT_FILE_PATH = "C:\WorkSpace\Java.El\Practice\Test2\WorkingResult.csv";
^
ReadFileSample.java:70: error: > expected
if( (6=<workingHour) && (workingHour<8) ){
^
ReadFileSample.java:70: error: ')' expected
if( (6=<workingHour) && (workingHour<8) ){
^
ReadFileSample.java:80: error: > expected
}else if( 8=<workingHour ){
^
ReadFileSample.java:80: error: ')' expected
}else if( 8=<workingHour ){
^
ReadFileSample.java:91: error: 'else' without 'if'
}else{
^
ReadFileSample.java💯 error: <identifier> expected
System.out.println( "今月のお給料は" + sum_paycheck + "円です。" );
^
ReadFileSample.java💯 error: illegal start of type
System.out.println( "今月のお給料は" + sum_paycheck + "円です。" );
^
ReadFileSample.java💯 error: ')' expected
System.out.println( "今月のお給料は" + sum_paycheck + "円です。" );
^
ReadFileSample.java💯 error: ';' expected
System.out.println( "今月のお給料は" + sum_paycheck + "円です。" );
^
ReadFileSample.java💯 error: illegal start of type
System.out.println( "今月のお給料は" + sum_paycheck + "円です。" );
^
ReadFileSample.java💯 error: <identifier> expected
System.out.println( "今月のお給料は" + sum_paycheck + "円です。" );
^
ReadFileSample.java💯 error: ';' expected
System.out.println( "今月のお給料は" + sum_paycheck + "円です。" );
^
ReadFileSample.java:101: error: <identifier> expected
System.out.println( "今月もお疲れ様でした。" );
^
ReadFileSample.java:101: error: illegal start of type
System.out.println( "今月もお疲れ様でした。" );
^
ReadFileSample.java:103: error: class, interface, or enum expected
}
^
20 errors
ーーーーーーーーーーーーーーーーーーーーーーーーーー
このうち、 illegal escape characterと<identifier> expectedとが、エラー内容をしらべてもほとんどが英語で出てきてしまうので、よくわかりませんでした。どういうエラーなのでしょうか?どなたか教えていただければうれしいです。
【追記】
ご指摘いただいた点を全て修正いたしましたところ、新たに以下のようなエラーがでてきました。また、上記のプログラミングコードも編集してご指摘いただいた点をなおした状態にしております。
plane
1C:\WorkSpace\Java.El\Practice\Test2>javac ReadFileSample.java 2ReadFileSample.java:99: error: cannot find symbol 3 System.out.println("今月のお給料は" + sum_paycheck + "円です。"); 4 ^ 5 symbol: variable sum_paycheck 6 location: class ReadFileSample 71 error
sum_paycheckがスコープからはずれているということでしょうか?ifの外で宣言し、ifの中でも使い、ifの外でもつかってる…というかんじですが…ifの中でprintlnしないといけないのでしょうか
回答3件
あなたの回答
tips
プレビュー