import java.util.ArrayList;
創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)雞澤,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
import java.util.List;
import java.util.Scanner;
public class GradeStatistic {
public static void main(String[] args) {
GradeStatistic gs = new GradeStatistic();
ListMark list = new ArrayListMark();
float sum = 0;
while(true){
Scanner sc = new Scanner(System.in);
System.out.print("Please input student name: ");
String name = sc.nextLine();
if(name.equals("end")){
break;
}
System.out.print("Please input student score: ");
float score = sc.nextFloat();
sum += score;
list.add(gs.new Mark(name, score));
}
float max = list.get(0).getScore();
float min = list.get(0).getScore();
for(Mark mark: list){
if(max mark.getScore()){
max = mark.getScore();
}
if(min mark.getScore()){
min = mark.getScore();
}
}
float average = sum / list.size();
System.out.println("Average is: " + average);
System.out.println("Max is: " + max);
System.out.println("Min is: " + min);
}
private class Mark{
private String name;
private float score;
public Mark(String name, float score){
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public float getScore() {
return score;
}
}
}
----------------------
Please input student name: Zhang san
Please input student score: 100
Please input student name: Li Si
Please input student score: 91
Please input student name: Ec
Please input student score: 35
Please input student name: ma qi
Please input student score: 67
Please input student name: end
Average is: 73.25
Max is: 100.0
Min is: 35.0
你沒有發(fā)現(xiàn)Java的代碼在J2EE里占的比重,那說明你對(duì)Java世界里的東西了解還是太少了。Java世界里所有的東西都是來源于你說的那些看起來很少的Java代碼,這些是基礎(chǔ)。
你還記得你做Java Swing開發(fā)或者J2EE開發(fā)都需要JDK吧,都需要那些Java包中的類來實(shí)現(xiàn)Java世界的功能,這些包的源碼就是用Java語言寫的,Java語言的邏輯也在那里。這些源碼可以在JDK的安轉(zhuǎn)文件中看到,我忘記是那個(gè)文件夾下了。你可以找一找,這些類都是.java文件。這是java語言開發(fā)者為了讓程序員更方便,它們來實(shí)現(xiàn)更多的業(yè)務(wù)邏輯,對(duì)外只提供實(shí)現(xiàn)功能的方法,而語言的使用者不必費(fèi)很多腦筋來考慮業(yè)務(wù)邏輯的事情了。更多的時(shí)間放在架構(gòu)上,反過來再說一下,Java語言安全性高是Java語言的一個(gè)特點(diǎn),如果你感覺 J2EE里用的Java語言的源代碼少而認(rèn)為java 不重要了?那么J2EE的安全又是從哪來的呢? J2EE的安全性還是來源于Java語言本身的安全。
J2EE開發(fā)有多個(gè)框架,這些框架本身就是Java語言實(shí)現(xiàn)的。沒個(gè)框架管理不同的模塊,每個(gè)模塊執(zhí)行一部分功能,這樣分工明確,有利于開發(fā)人員地分工,而且更利于代碼的維護(hù)和擴(kuò)展。你沒看到源碼少是因?yàn)镾un公司已經(jīng)用Java語言實(shí)現(xiàn)了一個(gè)個(gè)框架,這些框架相當(dāng)于一個(gè)平臺(tái),剩下的就是你用戶利用這些平臺(tái)需要你根據(jù)自己的功能實(shí)現(xiàn)自己的業(yè)務(wù)邏輯了,這些就要你自己設(shè)計(jì)了。而你自己的設(shè)計(jì)又會(huì)封裝在別的組建里,比如JavaBean技術(shù)。你在網(wǎng)上看到的那些源碼全是JSP標(biāo)簽和HTML標(biāo)簽就對(duì)了,我們做開發(fā)的時(shí)候要求業(yè)務(wù)邏輯一點(diǎn)不準(zhǔn)在頁(yè)面上出現(xiàn),業(yè)務(wù)邏輯的Java代碼只能通過Servlet,Spring,Struts來管理可以說后臺(tái)所有的業(yè)務(wù)邏輯都是用Java語言實(shí)現(xiàn)的而頁(yè)面的效果是JsP標(biāo)簽和HTML標(biāo)簽實(shí)現(xiàn)的。所以你在頁(yè)面部分是看不到Java語法的代碼的。(好的程序是這樣的)
順便說一句,Java語言開發(fā)的都是大的項(xiàng)目,因?yàn)榈匕踩裕缙脚_(tái)型和移植性和可擴(kuò)展性是其他語言無法比擬的。
J2EE中一些常用的框架:(引自百度百科)
Java開源項(xiàng)目
----------------------------------------------------
Spring Framework 【Java開源 J2EE框架】
Spring 是一個(gè)解決了許多在J2EE開發(fā)中常見的問題的強(qiáng)大框架。 Spring提供了管理業(yè)務(wù)對(duì)象的一致方法并且鼓勵(lì)了注入對(duì)接口編程而不是對(duì)類編程的良好習(xí)慣。Spring的架構(gòu)基礎(chǔ)是基于使用JavaBean屬性的 Inversion of Control容器。然而,這僅僅是完整圖景中的一部分:Spring在使用IoC容器作為構(gòu)建完關(guān)注所有架構(gòu)層的完整解決方案方面是獨(dú)一無二的。 Spring提供了唯一的數(shù)據(jù)訪問抽象,包括簡(jiǎn)單和有效率的JDBC框架,極大的改進(jìn)了效率并且減少了可能的錯(cuò)誤。Spring的數(shù)據(jù)訪問架構(gòu)還集成了 Hibernate和其他O/R mapping解決方案。Spring還提供了唯一的事務(wù)管理抽象,它能夠在各種底層事務(wù)管理技術(shù),例如JTA或者JDBC事務(wù)提供一個(gè)一致的編程模型。 Spring提供了一個(gè)用標(biāo)準(zhǔn)Java語言編寫的AOP框架,它給POJOs提供了聲明式的事務(wù)管理和其他企業(yè)事務(wù)--如果你需要--還能實(shí)現(xiàn)你自己的 aspects。這個(gè)框架足夠強(qiáng)大,使得應(yīng)用程序能夠拋開EJB的復(fù)雜性,同時(shí)享受著和傳統(tǒng)EJB相關(guān)的關(guān)鍵服務(wù)。Spring還提供了可以和IoC容器集成的強(qiáng)大而靈活的MVC Web框架。【SpringIDE:Eclipse平臺(tái)下一個(gè)輔助開發(fā)插件】.
WebWork 【Java開源 Web框架】
WebWork 是由OpenSymphony組織開發(fā)的,致力于組件化和代碼重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.1,現(xiàn)在的WebWork2.x前身是Rickard Oberg開發(fā)的WebWork,但現(xiàn)在WebWork已經(jīng)被拆分成了Xwork1和WebWork2兩個(gè)項(xiàng)目。 Xwork簡(jiǎn)潔、靈活功能強(qiáng)大,它是一個(gè)標(biāo)準(zhǔn)的Command模式實(shí)現(xiàn),并且完全從web層脫離出來。 Xwork提供了很多核心功能:前端攔截機(jī)(interceptor),運(yùn)行時(shí)表單屬性驗(yàn)證,類型轉(zhuǎn)換,強(qiáng)大的表達(dá)式語言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。 WebWork2建立在Xwork之上,處理HTTP的響應(yīng)和請(qǐng)求。WebWork2使用ServletDispatcher將HTTP請(qǐng)求的變成 Action(業(yè)務(wù)層Action類), session(會(huì)話)application(應(yīng)用程序)范圍的映射,request請(qǐng)求參數(shù)映射。WebWork2支持多視圖表示,視圖部分可以使用 JSP, Velocity, FreeMarker, JasperReports,XML等。在WebWork2.2中添加了對(duì)AJAX的支持,這支持是構(gòu)建在DWR與Dojo這兩個(gè)框架的基礎(chǔ)之上.【EclipseWork:用于WebWork輔助開發(fā)的一個(gè)Eclipse插件】
Struts 【Java開源 Web框架】
Struts 是一個(gè)基于Sun J2EE平臺(tái)的MVC框架,主要是采用Servlet和JSP技術(shù)來實(shí)現(xiàn)的。由于Struts能充分滿足應(yīng)用開發(fā)的需求,簡(jiǎn)單易用,敏捷迅速,在過去的一年中頗受關(guān)注。Struts把Servlet、JSP、自定義標(biāo)簽和信息資源(message resources)整合到一個(gè)統(tǒng)一的框架中,開發(fā)人員利用其進(jìn)行開發(fā)時(shí)不用再自己編碼實(shí)現(xiàn)全套MVC模式,極大的節(jié)省了時(shí)間,所以說Struts是一個(gè)非常不錯(cuò)的應(yīng)用框架。【StrutsIDE:用于Struts輔助開發(fā)的一個(gè)Eclipse插件】
Hibernate 【Java開源 持久層框架】
Hibernate 是一個(gè)開放源代碼的對(duì)象關(guān)系映射框架,它對(duì)JDBC進(jìn)行了非常輕量級(jí)的對(duì)象封裝,使得Java程序員可以隨心所欲的使用對(duì)象編程思維來操縱數(shù)據(jù)庫(kù)。 Hibernate可以應(yīng)用在任何使用JDBC的場(chǎng)合,既可以在Java的客戶端程序?qū)嵱?,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。Eclipse平臺(tái)下的Hibernate輔助開發(fā)工具:【Hibernate Synchronizer】【MiddlegenIDE】
Quartz 【Java開源 Job調(diào)度】
Quartz 是OpenSymphony開源組織在Job scheduling領(lǐng)域又一個(gè)開源項(xiàng)目,它可以與J2EE與J2SE應(yīng)用程序相結(jié)合也可以單獨(dú)使用。Quartz可以用來創(chuàng)建簡(jiǎn)單或?yàn)檫\(yùn)行十個(gè),百個(gè),甚至是好幾萬個(gè)Jobs這樣復(fù)雜的日程序表。Jobs可以做成標(biāo)準(zhǔn)的Java組件或 EJBs。Quartz的最新版本為Quartz 1.5.0。
Velocity 【Java開源 模板引擎】
Velocity 是一個(gè)基于java的模板引擎(template engine)。它允許任何人僅僅簡(jiǎn)單的使用模板語言(template language)來引用由java代碼定義的對(duì)象。當(dāng)Velocity應(yīng)用于web開發(fā)時(shí),界面設(shè)計(jì)人員可以和java程序開發(fā)人員同步開發(fā)一個(gè)遵循MVC架構(gòu)的web站點(diǎn),也就是說,頁(yè)面設(shè)計(jì)人員可以只關(guān)注頁(yè)面的顯示效果,而由java程序開發(fā)人員關(guān)注業(yè)務(wù)邏輯編碼。Velocity將java代碼從web頁(yè)面中分離出來,這樣為web站點(diǎn)的長(zhǎng)期維護(hù)提供了便利,同時(shí)也為我們?cè)贘SP和PHP之外又提供了一種可選的方案。 Velocity的能力遠(yuǎn)不止web站點(diǎn)開發(fā)這個(gè)領(lǐng)域,例如,它可以從模板(template)產(chǎn)生SQL和PostScript、XML,它也可以被當(dāng)作一個(gè)獨(dú)立工具來產(chǎn)生源代碼和報(bào)告,或者作為其他系統(tǒng)的集成組件使用。Velocity也可以為Turbine web開發(fā)架構(gòu)提供模板服務(wù)(template service)。Velocity+Turbine提供一個(gè)模板服務(wù)的方式允許一個(gè)web應(yīng)用以一個(gè)真正的MVC模型進(jìn)行開發(fā)。 【VeloEclipse :Velocity在Eclipse平臺(tái)下的一個(gè)輔助開發(fā)插件】
IBATIS 【Java開源 持久層框架】
使用ibatis 提供的ORM機(jī)制,對(duì)業(yè)務(wù)邏輯實(shí)現(xiàn)人員而言,面對(duì)的是純粹的Java對(duì)象, 這一層與通過Hibernate 實(shí)現(xiàn)ORM 而言基本一致,而對(duì)于具體的數(shù)據(jù)操作,Hibernate 會(huì)自動(dòng)生成SQL 語句,而ibatis 則要求開發(fā)者編寫具體的SQL 語句。相對(duì)Hibernate等 “全自動(dòng)”O(jiān)RM機(jī)制而言,ibatis 以SQL開發(fā)的工作量和數(shù)據(jù)庫(kù)移植性上的讓步,為系統(tǒng)設(shè)計(jì)提供了更大的自由空間。作為“全自動(dòng)”O(jiān)RM 實(shí)現(xiàn)的一種有益補(bǔ)充,ibatis 的出現(xiàn)顯 得別具意義。
Compiere ERPCRM 【Java開源ERP與CRM系統(tǒng)】
Compiere ERPCRM為全球范圍內(nèi)的中小型企業(yè)提供綜合型解決方案,覆蓋從客戶管理、供應(yīng)鏈到財(cái)務(wù)管理的全部領(lǐng)域,支持多組織、多幣種、多會(huì)計(jì)模式、多成本計(jì)算、多語種、多稅制等國(guó)際化特性。易于安裝、易于實(shí)施、易于使用。只需要短短幾個(gè)小時(shí),您就可以使用申購(gòu)-采購(gòu)-發(fā)票-付款、報(bào)價(jià)-訂單-發(fā)票-收款、產(chǎn)品與定價(jià)、資產(chǎn)管理、客戶關(guān)系、供應(yīng)商關(guān)系、員工關(guān)系、經(jīng)營(yíng)業(yè)績(jī)分析等強(qiáng)大功能了。
Roller Weblogger 【Java開源 Blog博客】
這個(gè)weblogging 設(shè)計(jì)得比較精巧,源代碼是很好的學(xué)習(xí)資料。它支持weblogging應(yīng)有的特性如:評(píng)論功能,所見即所得HTML編輯,TrackBack,提供頁(yè)面模板,RSS syndication,blogroll管理和提供一個(gè)XML-RPC 接口。
至于Java Swing中的方法在J2EE中是否可以用,你可以這樣理解,J2EE開發(fā)過程中和Java Swing開發(fā)使用了相同的類,那么就可以使用相同的方法,要是使用不同的類, 那要看這些類是不是出自一個(gè)祖宗,而且這個(gè)祖宗是不是提供了大家通用的方法。
比如Java Swing 開發(fā)中頁(yè)面使用到了 JFrame類,所以可以使用其中的getText()方法,可J2EE中不使用這個(gè)類,那么就不能使用getText()的方法了??梢栽趦蓚€(gè)開發(fā)中都是用到了String類,那么這個(gè)開發(fā)過程中就都可以用這個(gè)類的方法?。?/p>
順便說一句,Java Swing中的方法可能在J2EE中不能使用吧,畢竟是兩個(gè)方向的開發(fā)一個(gè)是C/S模式,一個(gè)是B/S模式,至少我現(xiàn)在還沒看到Java Swing中的一些類在J2EE中使用的比如Frame類。
希望你能更多的了解下,也告訴我一下!
寫的有點(diǎn)亂,希望讀者能看明白
#包括
#包括
#包括中
#定義N 50 / *定義符號(hào)常量,代表的學(xué)生人數(shù)最多* /
詮釋計(jì)數(shù)= 0; / *全局變量記錄數(shù)組的當(dāng)前位置* /
學(xué)生/ *定義結(jié)構(gòu)類型,代表學(xué)生信息* /
{
字符名[10]; / *學(xué)生姓名* /
字符數(shù)[10]; / *學(xué)生ID * /
浮點(diǎn)數(shù)學(xué)/數(shù)學(xué)成績(jī)* /
浮動(dòng)英語/英語成績(jī)* /
};的
輸入(學(xué)生* ARR)/ *函數(shù)聲明無效,輸入學(xué)生信息* /
無效排序(學(xué)生* ARR)/ *函數(shù)聲明的訂單* /
無效的發(fā)現(xiàn)(學(xué)生* ARR)/ *函數(shù)聲明,找一個(gè)學(xué)生信息* /
無效的主要()
{
的char selmenu; / *定義一個(gè)局部變量,用來記錄用戶選擇功能編號(hào)* / 學(xué)生螺柱[N]; / *定義結(jié)構(gòu)的數(shù)組,用于記錄學(xué)生信息* /
/ *循環(huán)接口* /
{系統(tǒng)(“CLS”); / *清屏功能* /
的printf(“\ N \ N”);
的printf(“\ \ T \ T \ T學(xué)生成績(jī)管理系統(tǒng)\ N \ N”);
的printf(“\ \ T \ T \ T1輸入學(xué)生成績(jī)\ N”);
的printf(“\ T \ T \ T \ T2。按排榜\ N”);
的printf(“\ \ T \ T \ T3查找學(xué)生信息\ N”); BR /的printf(“\噸\ T \ T \ T4退出\ n \ n已”);
的printf(“\ T \ T \輸入功能選擇號(hào)碼(1-4):”);
fflush的(STDIN); / *清空輸入緩沖區(qū)* /
scanf函數(shù)(“%c”的,selmenu)/ *接受用戶選擇功能號(hào)* /
開關(guān)( selmenu)/ *輸入一個(gè)不同的數(shù)字來調(diào)用相應(yīng)的函數(shù)來完成功能* /
{
case'1:
輸入(雙頭); / *調(diào)用輸入學(xué)生信息的功能, ,參數(shù)學(xué)生信息數(shù)組名* /
打破;
case'2:
排序(螺柱)/ *召喚出排榜函數(shù)的參數(shù)是數(shù)組名* /
;
case'3':
發(fā)現(xiàn)(螺柱)/ *由學(xué)生呼叫號(hào)碼和姓名查找學(xué)生信息的功能* /
突破;
}
}(selmenu! = '4'); / *確定是否退出* /
的printf(“\ n \ n已\ T \ T \ T ---------- -----謝謝---------------- \ N \ N“); / *輸出告別* /
} 無效輸入(學(xué)生* ARR)/ *定義輸入學(xué)生信息的功能* /
{
字符CH / *接收用戶指令* /
/ *使用周期,學(xué)生成績(jī)由用戶輸入控制* / {
系統(tǒng)(“CLS”);
的printf(“\ N%d的學(xué)生輸入信息:\ N輸入學(xué)生的姓名:”數(shù)+ 1); BR / scanf函數(shù)(“%”,編曲[計(jì)]名);
的printf(“\ n輸入學(xué)號(hào):”);
scanf函數(shù)(“%”,改編[計(jì)]數(shù)字);
的printf(“\ n輸入的數(shù)學(xué)成績(jī):”);
scanf函數(shù)(“%f”的改編[計(jì)]數(shù)學(xué));
的printf(“\ n輸入的英文結(jié)果:“);
scanf函數(shù)(”%f“的改編[計(jì)]);
數(shù)+ / *記錄當(dāng)前輸入學(xué)生信息,一些* / 的printf(“\ N是否繼續(xù)輸入(Y / N)\ N”);
fflush的(STDIN); / *清空輸入緩沖區(qū)* /
CH = getchar函數(shù)();
}(CH =='Y'| | CH =='Y')/ *確定用戶的指令,是否繼續(xù)輸入* /
} 無效排序(學(xué)生* ARR)的總成績(jī)排/ *定義列表功能* /
{
INT I,J,K; / *定義循環(huán)變量I,J,最低數(shù)量的位置k * / /結(jié)構(gòu)學(xué)生t; / *定義交換的臨時(shí)變量* /
如果(計(jì)數(shù)== 0)/ *陣列的學(xué)生表現(xiàn),以確定是否存在* /
的printf(“沒有學(xué)生的成績(jī),先記錄在學(xué)生信息\ N“);
其他
{
(I = 0; 計(jì)數(shù)1 + +)/ *類型的學(xué)生選擇方法成就* / {
K =我;
(J = i +1的; J 數(shù); J + +)/ * k是到達(dá)[我]改編[計(jì)數(shù)1 ,最低數(shù)量的位置* /
((ARR [K]。數(shù)學(xué)+到達(dá)[K]。英語)(ARR [J]。數(shù)學(xué)+改編[J]。英語)) K = J br(k! = I)/ *如果最小的號(hào)碼是不是比較列第一,交換* /
T =到達(dá)[K]; ARR [K] =到達(dá)[I];
到達(dá)[I] = T;
}
}
的printf(“\ N排榜:\ N \ N“); BR /的printf(”\ \ t斯ID \噸數(shù)學(xué)\噸英語\ t總\ t發(fā)布\“);
(J = 0; J 數(shù); J + +)/ *輸出出學(xué)生的成績(jī)和排名* /排榜
的printf(“\%-6S \ T%4S \ T%-6.1F \ T%6.1F \ T-6.1F% \ T%5D \ N“,
改編[J]。名字,編曲[J]。數(shù)量,編曲[J]。數(shù)學(xué),編曲[J]。英語,改編[J]。數(shù)學(xué)+改編[ J]英語
j +1)的;
}
的printf(“\ n輸入返回到主程序\ N”);
fflush的(STDIN); BR /的getchar的();
}
作廢的發(fā)現(xiàn)(學(xué)生ARR)/ *定義查詢功能* /
J;
字符名稱]的學(xué)生姓名;用于接收用戶輸入* /
字符數(shù)[10]; / *接收用戶輸入* /
系統(tǒng)的學(xué)生證(“CLS”); / / * *清屏功能* / 的printf(“\ n請(qǐng)輸入學(xué)生信息,您正在尋找:\”);
的printf(“\ n個(gè)學(xué)生的名字:”);
scanf函數(shù)(“%”,名稱);
的printf(“\ n個(gè)學(xué)生學(xué)號(hào):”);的
scanf函數(shù)(“%”號(hào));
(J = 0; J 計(jì)數(shù); J + +)/ *使用字符串比較函數(shù)來找到戰(zhàn)爭(zhēng)的藝術(shù)合格的學(xué)生成績(jī)* /
{
((STRCMP(名稱,編曲[J]。名字)== 0)(STRCMP(數(shù)量,到達(dá)[J]號(hào))== 0))
{
printf的-4S(“\ N \噸\噸數(shù)\噸數(shù)學(xué)\噸\噸得分\ N”);
的printf(“\%-6S \ T%\ T%6.1F \ T %\ T%6.1F-6.1F \ N“,
改編[J]。名字,編曲[J]。數(shù)量,編曲[J]。數(shù)學(xué),編曲[J]。英語,編曲[J]。數(shù)學(xué)+改編[J]。英語);
突破;
}
}
(J =計(jì))/ *如果沒有找到,從循環(huán)條件退出* /
printf的(“\ N沒有發(fā)現(xiàn)學(xué)生記錄,請(qǐng)檢查并重新找到!\ N”);
fflush的(STDIN); / *清空輸入緩沖區(qū)* /
printf的(“\ n輸入返回先前的功能菜單\ N”);
用getchar();
}
首先要掌握項(xiàng)目的架構(gòu)模式,把握一個(gè)整體。然后在根據(jù)端到端的數(shù)據(jù)流向進(jìn)行深入閱讀,比如從頁(yè)面添加一個(gè)字段,它是經(jīng)歷怎樣一個(gè)過程才到達(dá)數(shù)據(jù)庫(kù)的。