小春网

 找回密码
 注册账号
查看: 729|回复: 7
收起左侧

[IT 交流] 再来请教。JAVA程序的题。请您路过不要错过。

[复制链接]
发表于 2009-7-14 23:54:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

x
小妹我,又来请教高手们JAVA的题了。
希望您可以在闲暇之时,帮我看看,想想,写写。世界美好。
我是祖国的花朵。。。正准备享受您的浇灌 。。好像说的有点儿多余了。
其实小妹是很困惑很头痛的。拜托大家,帮帮看看。。谢谢谢谢。感谢您。。再次感谢您!

public class Main{
           public static void main(String[] args){
          ReportBox rbx = new ReportBox(100);
                     Report r1 =
                 Report.make("Matsuura","p00000","オブジェクト指向プログラミングI",
                 "継承とは、既存のクラスの性質を受け継いで新たなクラスを定義することである。");
          Report r2 =
                 Report.make("Matsuura","p00000","オブジェクト指向プログラミングI","***");
                     Report r3 =
                 Report.make("Yamada","p10000","オブジェクト指向プログラミングI","***");
          System.out.println("作成時: " + r1);
          System.out.println("作成時: " + r2);
          System.out.println("作成時: " + r3);
          System.out.println("=========================================");
          r2.setContents("継承において親クラスをスーパークラスとも呼ぶ。");
                     r3.setSubject("OOPI 演習第2 回");
                     r3.setContents("class ReportBox{ ... }");
           rbx.add(r1);
           rbx.add(r2);
           rbx.add(r3);
           System.out.println("提出時: " + rbx);
           r1.setMark(90);
           r2.setMark(80);
           r3.setMark(67);
           System.out.println("=========================================");
           System.out.println("採点後: " + rbx);
   }
}
class Report{
            String name;
String number;
String subject;
String contents;
int mark;

Report(String name, String number){
this.name = name;
this.number = number;
}
  void setSubject(String subject){
                        this.subject = subject;
}
      void setContents(String contents){
                        this.contents = contents;
}

void setMark(int mark){
                        this.mark = mark;
}
static Report make(String name, String number, String subject, String contents){
                       Report r = new Report(name,number);
                       r.setSubject(subject);
                       r.setContents(contents);
                     return r;
}
public String toString(){
                       return ("学番: " + this.number + ",名前: " + this.name + "¥n 課題: " + this.subject
                                   + "¥n 内容: " + this.contents + "¥n 点数: " + this.mark);
             }
}

class ReportBox{
             Report[] box;
int totalNumber;

ReportBox(int size){
                        this.box = new Report[size];
             this.totalNumber = 0;
             }
void add(Report aReport){
                        box[totalNumber] = aReport;
             totalNumber++;
             }
public String toString(){
                       String list = "レポートボックス:¥n";
                       for(int i = 0; i < this.totalNumber; i++){
                                 list += box + "&yen;n";
             }
return list;
}
}


上のプログラミング Main.rar (943 Bytes, 下载次数: 0) について以下の要求を満たすように、適切なクラスに適切なフィールドおよびメソッドを定義して拡張しなさい。追加または変更したフィールドおよびメソッドにコメントで、説明を付加しなさい。
① 課題ごとのReportBox を作成し、正しいレポートボックスに提出できるようにする。「正しい」の意味はReportBoxの課題名とレポートの課題名が一致することである。
② 課題毎にレポートの平均点を計算する。
③ クラス ReportおよびReportBoxを使って下記の振舞いを確認できるプログラム(Mainクラスのmainメソッド)を作成しなさい。
   ●2つ以上のレポートボックスに対して、適切に課題レポートを提出できる。
   ●課題毎にレポートの平均点の計算結果を表示する。

以上で課題ごとのReportBoxを作成し、正しいレポートボックスに提出できるようにした。作成したレポートの課題名が作成したレポートボックスのどれかの課題名に一致すれば、上手く処理できる(これがレポート提出の基本フロー)。しかし、該当するレポートボックスが存在しない場合もある(これが例外フロー)。この時に、提出できなかったレポートについて未提出レポートとしてメッセージを表示できるようにしなさい。さらに、以下の要求を満たすように、適切なクラスに適切なフィールドおよびメソッドを定義して拡張しなさい。追加または変更したフィールドおよびメソッドにコメントで、説明を付加しなさい。
④ 課題毎にレポートの平均点、最高点、最低点を計算する。
⑤ クラス ReportおよびReportBoxを使って下記の振舞いを確認できるプログラム(Mainクラスのmainメソッド)を作成しなさい。
   ●2つ以上のレポートボックスに対して、適切に課題レポートを提出できる。
   ●未提出レポートの一覧を表示する。
   ●課題毎にレポートの平均点、最高点、最低点の計算結果を表示する。
发表于 2009-7-15 12:00:23 | 显示全部楼层
出题老师的思想也是乱七八糟   出的要求不是重了吗?
2和4 重复,   3和5重复。。。

今天恰好有一点时间   正在解题中   请稍等
回复

使用道具 举报

发表于 2009-7-15 14:10:25 | 显示全部楼层
问题的说明有点重复  不过大致可以分析出如下要求:
1。以前只有一个ReportBox, 这次ReportBox有多个。 每个ReportBox也有一个课题名称。
2。生成Report(指定课题名称),然后保存到与自己同样课题名称的ReportBox里面去。如果没有找到同 课题名称的ReportBox, 那么就是 未提出レポート。
3。计算同课题名称的Report的最小点数,最大点数,平均点数。

最终的输出格式没有说明  所以 就按照我自己的想法输出了
回复

使用道具 举报

发表于 2009-7-15 14:12:00 | 显示全部楼层
程序运行输出结果:

★★★提出済みの課題一覧★★★★★★★★★★★★★★★
■■■■■■■■■■■■
レポートボックスの課題名:課題名1
この課題の最低点=70、最高点=90、平均点=80.00
--------レポート詳細------------------------
レポートボックス:
学番{s:1:tongue}0001,名前: 遠藤
課題: 課題名1
内容: なんでもかんけいね
点数: 90
学番{s:1:tongue}0002,名前: 田代
課題: 課題名1
内容: お久しぶり
点数: 80
学番{s:1:tongue}0003,名前: 近藤
課題: 課題名1
内容: だれや
点数: 70

■■■■■■■■■■■■
レポートボックスの課題名:課題名2
この課題の最低点=73、最高点=87、平均点=78.67
--------レポート詳細------------------------
レポートボックス:
学番{s:1:tongue}0004,名前: 西岡
課題: 課題名2
内容: ドM
点数: 87
学番{s:1:tongue}0005,名前: 西川
課題: 課題名2
内容: 先輩
点数: 76
学番{s:1:tongue}0006,名前: 柳原
課題: 課題名2
内容: かわいいブサイク
点数: 73

■■■■■■■■■■■■
レポートボックスの課題名:課題名3
この課題の最低点=33、最高点=95、平均点=72.67
--------レポート詳細------------------------
レポートボックス:
学番{s:1:tongue}0007,名前: 小島
課題: 課題名3
内容: そんなのかんけいね
点数: 33
学番{s:1:tongue}0008,名前: 菊池
課題: 課題名3
内容: 東大卒業
点数: 95
学番{s:1:tongue}0009,名前: 北村
課題: 課題名3
内容: 弁護士やで
点数: 90


★★★未提出レポート一覧★★★★★★★★★★★★★★★
学番{s:1:tongue}0010,名前: ノーネーム氏
課題: IT民工
内容: javaソース1行あたり1円から
点数: 10

学番{s:1:tongue}0011,名前: ジンバブエ
課題: 面白い国
内容: 旅行地1番やで ははは 行ってみよう
点数: 10

学番{s:1:tongue}0011,名前: だれでもいいや
課題: 人
内容: Never old to learnだって
点数: 10
回复

使用道具 举报

发表于 2009-7-15 14:16:35 | 显示全部楼层
为了简便起见  每一课题的Report只生成了3个   你可以随意增加
下面是程序。   这次没多少时间    所以不能写详细了   你自己看程序研究吧    加注释的地方就是增加的内容  注释是给你看的   你可以按照你的想法修改一下
回复

使用道具 举报

发表于 2009-7-15 14:16:56 | 显示全部楼层
//レポートボックスを格納、管理するリスト(java言語の基本クラスではないのでimportする必要有)
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

public class Main {
   
    /**
     * レポートを自分の課題名と同じレポートボックスに提出する処理
     * (課題名不一致で提出できなかったレポートは未提出レポートリストに保存する)
     * @param rpt      : 提出するレポート
     * @param lstRptBox: レポートボックスを格納リスト
     * @param lstBadRpt: 未提出レポート格納リスト
     */
    private static void addReportToOwnReportBox(Report rpt,List lstRptBox,List lstBadRpt){
        int iLoop;
        boolean bSubmited = false;  //提出済みフラグ(true:提出済み;false:未提出)
        
        //提出レポートと同じ課題名のレポートボックスを探し、あったらレポートを提出する
        for(iLoop=0;iLoop<lstRptBox.size();iLoop++){
            ReportBox rb = (ReportBox)lstRptBox.get(iLoop);
            if(rb.getSubject().equals(rpt.getSubject())){  //レポートの課題名と同じ課題名のレポートボックスの場合
                rb.add(rpt);  //レポートを提出する
               
                bSubmited = true;  //提出済みに
            }//end if
        }//end for
        
        if(!bSubmited)  //未提出の場合
            lstBadRpt.add(rpt);  //同じ課題名のレポートボックスがないということで、未提出リストに追加する
    }
   
    public static void main(String[] args) {
        
        /* 元のソースは削除
        ReportBox rbx = new ReportBox(100);
        
        Report r1 = Report.make("Matsuura", "p00000", "オブジェクト指向プログラミングI", "継承とは、既存のクラスの性質を受け継いで新たなクラスを定義することである。");
        Report r2 = Report.make("Matsuura", "p00000", "オブジェクト指向プログラミングI", "***");
        Report r3 = Report.make("Yamada", "p10000", "オブジェクト指向プログラミングI", "***");
        
        System.out.println("作成時: " + r1);
        System.out.println("作成時: " + r2);
        System.out.println("作成時: " + r3);
        
        System.out.println("=========================================");
        
        r2.setContents("継承において親クラスをスーパークラスとも呼ぶ。");
        r3.setSubject("OOPI 演習第2 回");
        r3.setContents("class ReportBox{ ... }");
        
        rbx.add(r1);
        rbx.add(r2);
        rbx.add(r3);
        
        System.out.println("提出時: " + rbx);
        
        r1.setMark(90);
        r2.setMark(80);
        r3.setMark(67);
        
        System.out.println("=========================================");
        
        System.out.println("採点後: " + rbx);
        */
        
        //レポートボックスを格納  5対応
        List lstReportBox = new ArrayList();
        
        //課題名が不一致で提出できなかったレポート格納 5対応(未提出レポートの一覧を表示する ために保存)
        List lstBadReport = new ArrayList();
        
        //問題: 2つ以上のレポートボックスに対して、適切に課題レポートを提出できる。>>>>>>>>>>>>>>>>>>>>>>>>>>
        //とりあえず、3つのレポートボックスを生成する
        ReportBox rb = new ReportBox("課題名1",100);
        lstReportBox.add(rb);
        
        rb = new ReportBox("課題名2",100);
        lstReportBox.add(rb);
        
        rb = new ReportBox("課題名3",100);
        lstReportBox.add(rb);
        
        Report rpt;
        
        //課題1のレポートを3つ生成
        rpt = Report.make("遠藤", "P0001", "課題名1", "なんでもかんけいね");
        rpt.setMark(90);  //採点  この部分は前の知識もあるし、任せる
        addReportToOwnReportBox(rpt,lstReportBox,lstBadReport);  //課題名が一致するレポートボックスに提出する
        
        rpt = Report.make("田代", "P0002", "課題名1", "お久しぶり");
        rpt.setMark(80);  //採点
        addReportToOwnReportBox(rpt,lstReportBox,lstBadReport);  //課題名が一致するレポートボックスに提出する
        
        rpt = Report.make("近藤", "P0003", "課題名1", "だれや");
        rpt.setMark(70);  //採点
        addReportToOwnReportBox(rpt,lstReportBox,lstBadReport);  //課題名が一致するレポートボックスに提出する
        
        //課題2のレポートを3つ生成
        rpt = Report.make("西岡", "P0004", "課題名2", "ドM");
        rpt.setMark(87);  //採点
        addReportToOwnReportBox(rpt,lstReportBox,lstBadReport);  //課題名が一致するレポートボックスに提出する
        
        rpt = Report.make("西川", "P0005", "課題名2", "先輩");
        rpt.setMark(76);  //採点
        addReportToOwnReportBox(rpt,lstReportBox,lstBadReport);  //課題名が一致するレポートボックスに提出する
        
        rpt = Report.make("柳原", "P0006", "課題名2", "かわいいブサイク");
        rpt.setMark(73);  //採点
        addReportToOwnReportBox(rpt,lstReportBox,lstBadReport);  //課題名が一致するレポートボックスに提出する
        
        //課題3のレポートを3つ生成
        rpt = Report.make("小島", "P0007", "課題名3", "そんなのかんけいね");
        rpt.setMark(33);  //採点
        addReportToOwnReportBox(rpt,lstReportBox,lstBadReport);  //課題名が一致するレポートボックスに提出する
        
        rpt = Report.make("菊池", "P0008", "課題名3", "東大卒業");
        rpt.setMark(95);  //採点
        addReportToOwnReportBox(rpt,lstReportBox,lstBadReport);  //課題名が一致するレポートボックスに提出する
        
        rpt = Report.make("北村", "P0009", "課題名3", "弁護士やで");
        rpt.setMark(90);  //採点
        addReportToOwnReportBox(rpt,lstReportBox,lstBadReport);  //課題名が一致するレポートボックスに提出する      
        
        //課題名が一致しないレポートをいくつか生成(未提出レポート一覧表示用)
        rpt = Report.make("ノーネーム氏", "P0010", "IT民工", "javaソース1行あたり1円から");
        rpt.setMark(10);  //採点
        addReportToOwnReportBox(rpt,lstReportBox,lstBadReport);  //課題名が一致するレポートボックスに提出する
        
        rpt = Report.make("ジンバブエ", "P0011", "面白い国", "旅行地1番やで ははは 行ってみよう");
        rpt.setMark(10);  //採点
        addReportToOwnReportBox(rpt,lstReportBox,lstBadReport);  //課題名が一致するレポートボックスに提出する
        
        rpt = Report.make("だれでもいいや", "P0011", "人", "Never old to learnだって");
        rpt.setMark(10);  //採点
        addReportToOwnReportBox(rpt,lstReportBox,lstBadReport);  //課題名が一致するレポートボックスに提出する
        //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        
        int iLoop;
        
        DecimalFormat sf = new DecimalFormat("0.00");
        //提出済みの課題を課題名毎に表示
        System.out.println("\n★★★提出済みの課題一覧★★★★★★★★★★★★★★★★★★★★★");
        for(iLoop=0;iLoop<lstReportBox.size();iLoop++){
            ReportBox rbTmp = (ReportBox)lstReportBox.get(iLoop);
            
            //最低点、最高点、平均点を計算する
            rbTmp.calcMinMaxAvgMark();
            
            System.out.println("■■■■■■■■■■■■");
            System.out.println("レポートボックスの課題名:" + rbTmp.getSubject());
            System.out.println("この課題の最低点=" + rbTmp.getMinMark()
                               + "、最高点=" + rbTmp.getMaxMark()
                               + "、平均点=" + sf.format(rbTmp.getAvgMark()));
            System.out.println("--------レポート詳細------------------------");
            System.out.println(rbTmp.toString());
        }//end for
        
        //未提出レポート一覧
        System.out.println("\n★★★未提出レポート一覧★★★★★★★★★★★★★★★★★★★★★");
        for(iLoop=0;iLoop<lstBadReport.size();iLoop++){
            Report rptTmp = (Report)lstBadReport.get(iLoop);
            System.out.println(rptTmp.toString() + "\n");
        }//end for
    }
}

public class Report {
    String name;
    String number;
    String subject;
    String contents;
    int mark;

    Report(String name, String number) {
        this.name = name;
        this.number = number;
    }

    void setSubject(String subject) {
        this.subject = subject;
    }

    void setContents(String contents) {
        this.contents = contents;
    }

    void setMark(int mark) {
        this.mark = mark;
    }

    static Report make(String name, String number, String subject, String contents) {
        Report r = new Report(name, number);
        r.setSubject(subject);
        r.setContents(contents);
        return r;
    }

    public String toString() {
        return ("学番: " + this.number + ",名前: " + this.name + "\n 課題: " + this.subject + "\n 内容: "
                + this.contents + "\n 点数: " + this.mark);
    }
   
    /**
     * レポートの課題名を返す
     * @return
     */
    public String getSubject(){
        return this.subject;
    }
   
    /**
     * このレポートの点数を返す 2,4対応
     * @return
     */
    public int getMark(){
        return this.mark;
    }
}

public class ReportBox {
    String strSubject = "";  //レポートボックスの課題名 1対応
   
    Report[] box;
    int totalNumber;
   
    //本レポートボックスに格納されてあるレポート群の最低点、最高点、平均点数 2,4対応
    int iMinMark = 0, iMaxMark = 0;
    float iAvgMark = 0f;

    /**
     * レポートボックスコンストラクタ
     * @param subject 課題名
     * @param size    格納するレポートの最大個数
     */
    ReportBox(String subject,int size) {
        this.strSubject = subject;  //レポートボックスの課題名を記憶 1対応
        
        this.box = new Report[size];
        this.totalNumber = 0;
    }

    void add(Report aReport) {
        box[totalNumber] = aReport;
        totalNumber++;
    }

    public String toString() {
        String list = "レポートボックス:\n";
        for (int i = 0; i < this.totalNumber; i++) {
            list += box[i] + "\n";
        }
        return list;
    }
   
    /**
     * レポートボックスの課題名を返す
     * @return
     */
    public String getSubject(){
        return this.strSubject;
    }
   
    /**
     * 最低点を返す
     * @return
     */
    public int getMinMark(){
        return this.iMinMark;
    }
   
    /**
     * 最高点を返す
     * @return
     */
    public int getMaxMark(){
        return this.iMaxMark;
    }
   
    /**
     * 平均点を返す
     * @return
     */
    public float getAvgMark(){
        return this.iAvgMark;
    }
   
    /**
     * 最低点、最高点、平均点数を計算する 2,4対応
     */
    public void calcMinMaxAvgMark(){
        int   iLoop;
        float fSum = 0;
        int   iCnt = 0;
        
        for(iLoop=0;iLoop<this.totalNumber;iLoop++){
            int iTmp = box[iLoop].getMark();  //レポートの点数を取得
            
            if(iLoop==0)
                iMinMark = iTmp;
            
            //最低点、最高点判定
            if(iTmp<iMinMark)
                iMinMark = iTmp;
            else if(iTmp>iMaxMark)
                iMaxMark = iTmp;
            
            fSum += iTmp;  //点数を累計(後で平均値を計算するため)
            iCnt++;
        }//end for
        
        if(iCnt>0)
            iAvgMark = fSum / iCnt;
    }
}
回复

使用道具 举报

 楼主| 发表于 2009-7-15 14:22:09 | 显示全部楼层
为了简便起见  每一课题的Report只生成了3个   你可以随意增加
下面是程序。   这次没多少时间    所以不能写详细了   你自己看程序研究吧    加注释的地方就是增加的内容  注释是给你看的   你可以按照你的想法修改 ...
等待UFO 发表于 2009-7-15 14:16


哈哈 !真好。又是等待UFO同志 。。每次都在第一时间帮助我。每次都刚好你没事。哇哈哈。。太开心了。
您JAVA学的真好。为什么我就没有这个天赋呢。

还是衷心感谢啦。!!真的。超感谢。我能帮上你什么不。
回复

使用道具 举报

发表于 2009-7-15 14:28:19 | 显示全部楼层
这次多出了
List接口, ArrayList类, DecimalFormat类 的使用。 感觉对你有点深了   不过要求里也没有说 增加一个class  所以只好用这些了    其实  上面的这些现成的东西用起来很方便   比自己编程实现高效率,安全。
不过,  要学习阿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小春网
常务客服微信
微信订阅号
手机客户端
扫一扫,查看更方便! 快速回复 返回顶部 返回列表