• 締切済み

貸し出し時間の計算するプログラムを教えてください!

JAVAについて教えてくださいっ!! 下のプログラムは貸出リストの貸出時間総計を出力するプログラムです! これをどう修正すればよいのか教えてほしいです! ~~~~~~~~ import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; public class Test { public static void main(String[] args) { try{ Scanner file = new Scanner(new File(args[0])); int tm = 0; while (file.hasNext()) { char b = file.next().charAt(0); char io = file.next().charAt(0); int h = file.nextInt(); int m = file.nextInt(); switch (io) { case 'I': tm += 60*h+m; break; case 'O': tm -= 60*h+m; break; } } System.out.printf("%d:%02d\n", tm/60, tm%60); file.close(); } catch(FileNotFoundException e) { System.out.println(e); } } } ~~~~~~~~ このプログラムを修正して、貸出リスト各貸出物の貸出時間合計を出力しつつ、全貸出物の貸出時間の合計を計算し、それらの結果を標準出力に出力するプログラムを作成したいです! それにはどうやって修正すればよいでしょうか???? ~~~~~~~~ ☆貸出リスト(list1.txt) ACD→貸出物の名前、O→貸出時間、I→返却時間 A O 09 10 C O 09 25 A I 09 50 C I 10 05 D O 10 15 D I 10 55 A O 11 30 C O 12 00 A I 12 45 C I 13 15 D O 13 20 A O 13 30 D I 14 05 A I 14 15 D O 14 55 D I 15 40 ~~~~~~~~ 【実行例】 ↓のように出力させたいです ☆コマンドライン入力 list1.txt ☆標準出力 A 2:40 C 1:55 D 2:10 6:45 よろしくお願いいたします!(^^)!

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

  • _kappe_
  • ベストアンサー率68% (1523/2217)
回答No.1

いくつか確認させてください。 [1]貸出物の名前はACDの3種類だけですか。それとも、char型1文字で表せる範囲で100種類でも1000種類でも対応する必要がありますか。 [2]貸出時間と返却時間のデータは必ずペアになっていると思っていいのですか。貸出だけがあって返却がないとか、貸出と返却の順番が逆になっているとかの不正データをチェックしなければならないとすると厄介です。 [3]入力データは必ず時刻順に並んでいるのでしょうか。もし"D O 13 20"の次に"C I 13 15"というデータが来たらどのように処理すべきですか。 [4]たとえば17:30に貸出、翌日の10:00に返却のような場合を考慮する必要はありますか。入力データに日付がないので必ず当日中に返却される前提でしょうか。 もしこれが学校か何かの宿題なのであれば、出題者に仕様を確認してください。 ちなみに、「貸出時間の総計 プログラム」でネット検索すると、似たような内容のC言語の課題の質問が見つかりました。

関連するQ&A

  • JAVAのソートプログラムについて

    List1.txtの内容の単語の数を数え、その数を単語の隣に表示するプログラムを作りました。 (1)List1.txtの内容 ゲーム ゲーム 麻雀 麻雀 野球 ゲーム (2)実行結果 C:\>java Lists ゲーム 3 野球 1 麻雀 2 (3)プログラム import java.io.BufferedWriter; import java.nio.charset.Charset; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.TreeMap; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import java.util.*; public class Lists { public static void main(String[] args) throws IOException{ File file3 = new File("C:\\List1.txt"); BufferedReader br3 = new BufferedReader(new FileReader(file3)); FileWriter filewriter3 = new FileWriter(file3,true); TreeMap<String,Integer> tm = new TreeMap<String,Integer>(); String line; while((line = br3.readLine()) != null){ String[] words = line.split("\\s"); for(String s : words){ if(!tm.containsKey(s)){ tm.put(s,1); }else{ tm.put(s,tm.get(s).intValue()+1); }} } for(String s : tm.keySet()){ System.out.println(s + " " + tm.get(s) ); }}} このプログラムを上から単語の数が多い順に表示したいのですがどこをどう修正したらいいのか悩んでます。 C:\>java Lists ゲーム 3 麻雀 2 野球 1 と表示されればOKです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaのソートプログラムについて

    List1.txtの内容の単語の数を数え、その数を単語の隣に表示するプログラムを作りました。 (1)List1.txtの内容 ゲーム ゲーム 麻雀 麻雀 野球 ゲーム (2)実行結果 C:\>java Lists ゲーム 3 野球 1 麻雀 2 (3)プログラム import java.io.BufferedWriter; import java.nio.charset.Charset; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.TreeMap; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import java.util.*; public class Lists { public static void main(String[] args) throws IOException{ File file3 = new File("C:\\List1.txt"); BufferedReader br3 = new BufferedReader(new FileReader(file3)); FileWriter filewriter3 = new FileWriter(file3,true); TreeMap<String,Integer> tm = new TreeMap<String,Integer>(); String line; while((line = br3.readLine()) != null){ String[] words = line.split("\\s"); for(String s : words){ if(!tm.containsKey(s)){ tm.put(s,1); }else{ tm.put(s,tm.get(s).intValue()+1); }} } for(String s : tm.keySet()){ System.out.println(s + " " + tm.get(s) ); }}} このプログラムを上から単語の数が多い順に表示したいのですがどこをどう修正したらいいのか悩んでます。 C:\>java Lists ゲーム 3 麻雀 2 野球 1 と表示されればOKです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 拡張子の読み込み制限を設けたいのですが・・・

    現在Javaのプログラム課題を行っているものです。 前回こちらで質問させていただいたのですが、 解決に至らなかったので再度質問させていただきたいと思います。 前回の質問→ http://okwave.jp/qa4023470.html こちらが修正後のプログラムの一部です。↓ package studyA; import java.util.*; import java.io.FileReader; import java.io.BufferedReader; import java.io.File; import java.io.FileWriter; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.IOException; public class A23_StrArray extends A22_StrArray { /** * テキストファイルの読込み(上書きモード) * @param path ファイルのパス * @exception FileNotFoundException ファイルが見つからなかった場合 * IOException 入出力エラーが発生した場合 */ // 修正として付け加えた部分(開始位置) public class CheckClass check { check = new CheckClass(); check = path; public boolean accept(path) { //拡張子がtxtであるかのの判定を行います。 String ext = getExtension(path); if (ext != null && ext.equals("txt")) { return true; } } } //プログラム修正箇所 (終点) public void readFile(String path) throws Exception { try { //BufferedReader in = new BufferdReader(new FileReader()) FileReader fr = new FileReader(path); //FileReaderのインスタンスを作成 BufferedReader br = new BufferedReader(fr); //BufferedReaderのインスタンスを作成 String line; list.clear(); //リストをクリア while ((line = br.readLine()) != null) //要素がなくなるまで繰り返す { add(line); } System.out.println("ファイルを読み込みしました。"); br.close(); } catch(FileNotFoundException e)//ファイルが見つからなかった時 { System.out.println("ファイルが見つかりません。"); } catch(IOException e)//入出力エラーが発生した場合 { System.out.println("入出力エラーが発生しました。"); } } 現在は、コンパイルエラーでC:\Java>javac A23_StrArray.java A23_StrArray.java:28: '{' がありません。 public class CheckClass check と表示されます。一体どのように修正を加えれば、 txtのみ読み込んで、上書きなどができるプログラムを作ることができるのでしょうか?

    • ベストアンサー
    • Java
  • JAVAのプログラムについての質問です。

    JAVAのプログラムについての質問です。 技術系の学生です。今、卒業研究でJAVAで音声を再生するプログラムを作成しているのですが、調べても解決できないエラーがあったため質問させていただきました。以下にソースコードを示します。 package Sound; import javax.media.*; import java.io.File; import java.net.URL; import java.io.FileNotFoundException; public class Soundonly { public static void main(final String[] args) { try { File f = new File(args[0]); URL url = f.toURL(); Player p = Manager.createRealizedPlayer(url); p.start(); } catch (FileNotFoundException e) { // エラー処理 } } } これをコンパイルしようとすると、 この行に複数マーカーがあります - アクセス制限: 型 Player は必須ライブラリー C:\Program Files\Java\jre6\lib\ext \jmf.jar で制限されているためアクセスできません - アクセス制限: 型 Manager は必須ライブラリー C:\Program Files\Java\jre6\lib\ext \jmf.jar で制限されているためアクセスできません - アクセス制限: 型 Manager のメソッド createRealizedPlayer(URL) は必須ライブラリー C: \Program Files\Java\jre6\lib\ext\jmf.jar で制限されているためアクセスできません アクセス制限: 型 Player のメソッド start() は必須ライブラリー C:\Program Files\Java\jre6\lib\ext \jmf.jar で制限されているためアクセスできません とエラーが出て、コンパイルが通りません。JMFはインストール済みです。 どなたか解決法を教えていただけないでしょうか。よろしくお願いします。

    • ベストアンサー
    • Java
  • プログラムについて

    2進数を文字としてgets()関数を使って入力し,入力された値と宣言している変数(初期値は0)とのビット演算和を取り,2進数に変換し直すという3つの動作を繰り返すプログラムを作成しようとしています。 現在は,現在は最後の出力の部分が前回演算和した値が反映されずに出力してしまうのでこまっています。現在作成しているプログラムを添付します。ここを直したほうがよい,または,このプログラムの方がよいのではと思う方は返信願います。 int main(void) { char a[100],e[100]; int len,k,p,g; int c=0,d; int nisin[16]; int i; printf("2進数を入力:"); gets(a); while(a[1]!=0){ len=strlen(a); for(k=0;k<=len-1;k++){ e[k]=(a[k]-'0')<<(len-(k+1)); } g=0; for(p=0;p<=len-1;p++){ g+=e[p]; } printf("10進数は:%d\n",g); c|=g;/**/ printf("演算和:"); /*変換*/ for(i=0; i<16; i++){ nisin[i] = c % 2; c = c / 2; } /*出力*/ for(i=16-1; i>=0; i--){ printf("%d",nisin[i]); } printf("\n"); printf("2進数を入力:"); gets(a); } return 0; }

  • シグマの計算をプログラムで

    少し分かりにくいですが、、、 (1≦j≦N+1)の下で、 Z=Σ(k=1~N)Σ(i=1~k-1)A[i]+Σ(i=1~j-1)A[i] をプログラム風に書くとどうなるか教えてください。(C又はできたらFortlanで) あと、Σ(i=1~0)A[i]はどうなるのですか?0ですか? 以上2点お願いします。

  • 動くプログラムと動かないプログラム

    senをつかってプログラムを実行したところ import java.io.IOException; import net.java.sen.StringTagger; import net.java.sen.Token; public class SenSample { public static void main(String[] args) throws IllegalArgumentException, IOException { System.setProperty("sen.home","c:/sen"); StringTagger tagger = StringTagger.getInstance(); String str = "私の名前を当ててください"; Token[] token = tagger.analyze(str); for(int i=0; i<token.length; i++){ System.out.println(token[i].getBasicString() +"("+token[i].getTermInfo()+")"); } } } は動きましたが、 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Locale; import net.java.sen.StringTagger; import net.java.sen.Token; public class StringTaggerDemo { public static void main(String args[]) { try { <中略> } } } は動きません 結果↓ C:\java>java StringTaggerDemo done. Please input Japanese sentence: java.lang.IllegalArgumentException: C:\java\null\conf\sen.xml (指定されたパスが 見つかりません。) at net.java.sen.StringTagger.readConfig(StringTagger.java:304) at net.java.sen.StringTagger.init(StringTagger.java:145) at <中略>net.java.sen.StringTagger.getInstance(StringTagger.java:113) at StringTaggerDemo.main(StringTaggerDemo.java:13) -- Press any key to exit (Input "c" to continue) -- となります。 違いは何ですか??

    • ベストアンサー
    • Java
  • プログラムの追加と削除で不要プログラムの削除

    プログラムの追加と削除で不要プログラムの削除をしたいんですが、 たとえば java(TM)6 Update 30と言うプログラムと java(TM)7 Update 30があるんですが 7がインストールされていれば古いバージョンの6はアンインストール してもいいのでしょうか。なんか重複してファイル容量を圧迫しているように 思えましたので・・ また、Microsoft .NET Frameworkも1.1から4まであり4がインストールされて いればその他は削除して問題ないのでしょうか どなたかわかる方がいましたらご教授のほどお願いします。

  • javaのプログラム

    int型の配列の各要素に1~10の乱数を代入し、各要素の値を縦向きの*のグラフで表示するプログラムを作っているのですが、結果がランダムででるので、自分の書いたプログラムが正しいのかわかりません。ソースを載せますので合っているのか間違っているか教えて下さい。もし間違っているならどこが間違いなのか教えていただけると嬉しいです。よろしくお願いします。 ●ソース import java.util.Random; import java.util.Scanner; class Graph { public static void main(String[] args){ Random rand = new Random(); Scanner stdIn = new Scanner(System.in); System.out.print("要素数:"); int n = stdIn.nextInt(); int a[] = new int[n]; for (int i = 0; i < n; i++) a[i] = 1 + rand.nextInt(10); for (int i = 1; i <= 10; i++){ for (int j = 0; j < n; j++) if (a[j] <= i) System.out.print("* "); else System.out.print(" "); System.out.println(); } } } ●実行例 要素数:12 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    • ベストアンサー
    • Java
  • 時間と単価の計算

    各セルは下記のようになっています C6(貸出時刻)8:00 D6(返却時刻)12:00 H6(所要時間)8:00 1時間休憩があるので下記のような式になっています =IF(I5="日","",IF(COUNT(C6:D6)<2,"",TEXT(D6-    C6,"h:mm")-((C6<="12:00"*1)*(D6>="13:00"*1)    *"1:00"))) J6(単価)510 最終的に K6(金額)としたいのですが計算出来ません 単純に8*510=4080を出すにはどうしたら良いでしょうか