前提・実現したいこと
例外処理をなくして、コマンドプロンプトに、読み込んだデータを表示させたい。
エクリプスではしっかりと、例外なく起動できるのですが、コマンドプロンプト上では、以下の例外が起こってしまいます。
WHILEで、次に行があるかどうかを確認していて、なかっ場合、自動でファイルがクローズする、という方法を参考にしています。
発生している問題・エラーメッセージ
C:\Users\snk19\Documents>java Kadai02 社員コード:01 氏名:山田花子 支給額:200000 社員コード:02 氏名:佐藤太郎 支給額:205000 社員コード:03 氏名:中野優香 支給額:303000 社員コード:04 氏名:小田正人 支給額:426000 社員コード:05 氏名:村田桃子 支給額:528000 Exception in thread "main" java.util.NoSuchElementException at java.base/java.util.Scanner.throwFor(Scanner.java:937) at java.base/java.util.Scanner.next(Scanner.java:1478) at Kadai02.main(Kadai02.java:25) C:\Users\snk19\Documents>
該当のソースコード
java
1import java.io.File; 2import java.io.FileNotFoundException; 3import java.util.Scanner; 4 5public class Kadai02 6{ 7public static void main(String[] args) 8{ 9//ファイルを読み込む 10File f = new File("C:/Users/snk19/Documents/emo01.txt"); 11//File f = new File("C:/Users/snk19/Documents/emp02.txt"); 12//File f = new File("C:/pleiades/workspace/Kadai02/src/emp02.txt"); 13//File f = new File("emp02.txt"); 14 15//Scannerを使って文字列の読み込みを行う 16try(Scanner sc = new Scanner(f)) 17{ 18//useDelimiterメソッドで区切り文字の指定 19sc.useDelimiter(","); 20 21//hasNextLineで次の行が存在するか確認 22while(sc.hasNextLine()) 23{ 24String empCode = sc.next(); 25String empName = sc.next(); 26String basic = sc.next(); 27int basicPay = Integer.parseInt(basic); 28String family = sc.next(); 29int dependentRelatives = Integer.parseInt(family); 30 31 32 33//int payment = 0; 34 35/*System.out.print("社員コード:"+empCode); 36System.out.print("氏名:"+empName); 37System.out.println("支給額:"+payment); 38//System.out.println("支給額:"+ifReturn()); 39 40System.out.print("社員コード:"+empCode); 41System.out.print("氏名:"+empName); 42System.out.println("支給額:"+a); 43 44System.out.print("社員コード:"+empCode); 45System.out.print("氏名:"+empName); 46System.out.println("支給額:"+b); 47 48System.out.print("社員コード:"+empCode); 49System.out.print("氏名:"+empName); 50System.out.println("支給額:"+c); 51 52System.out.print("社員コード:"+empCode); 53System.out.print("氏名:"+empName); 54System.out.println("支給額:"+d);*/ 55 56switch(dependentRelatives) 57{ 58case 0: 59int payment = basicPay; 60System.out.print(" 社員コード:"+empCode); 61System.out.print(" 氏名:"+empName); 62System.out.println(" 支給額:"+payment); 63//System.out.println("支給額:"+ifReturn()); 64break; 65 66case 1: 67payment = basicPay + 10000; 68int a = payment; 69//payment = basicPay + 10000; 70System.out.print(" 社員コード:"+empCode); 71System.out.print(" 氏名:"+empName); 72System.out.println(" 支給額:"+a); 73//System.out.println(" 支給額:"+payment); 74//System.out.println("支給額:"+ifReturn()); 75break; 76 77case 2: 78payment = basicPay + 5000; 79System.out.print(" 社員コード:"+empCode); 80System.out.print(" 氏名:"+empName); 81System.out.println(" 支給額:"+payment); 82break; 83 84case 3: 85payment = basicPay + 3000; 86System.out.print(" 社員コード:"+empCode); 87System.out.print(" 氏名:"+empName); 88System.out.println(" 支給額:"+payment); 89break; 90 91default: 92if(dependentRelatives >= 4) 93{ 94int total3People = 10000 + 5000 + 3000; 95payment = basicPay + total3People + (dependentRelatives*2000) ; 96System.out.print(" 社員コード:"+empCode); 97System.out.print(" 氏名:"+empName); 98System.out.println(" 支給額:"+payment); 99break; 100} 101sc.nextLine(); 102} 103//次の行へ 104//sc.nextLine(); 105} 106//次の行へ 107//sc.nextLine(); 108} 109catch (FileNotFoundException e) 110{ 111e.printStackTrace(); 112} 113 114} 115 116 117 118} 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
試したこと
・sc.nextLine();の位置が違うのかと思い、コメントアウトしてるところで試してみた
補足情報(FW/ツールのバージョンなど)
読み込んでいるデータ
01,山田花子,200000,0,
02,佐藤太郎,200000,2,
03,中野優香,300000,3,
04,小田正人,400000,4,
05,村田桃子,500000,5,
あなたの回答
tips
プレビュー