2006年7月19日

          從這個(gè)程序中學(xué)到的:
          1 throws IOExceptiom 在這里不如用try catch方便
          2 已經(jīng)創(chuàng)建類(lèi)的方法的調(diào)用



          //計(jì)算一個(gè)一元二次方程
          import java.io.*;


          class InputData //建造一個(gè)從鍵盤(pán)獲取數(shù)據(jù)的累
          {
          ?private static String s="";
          ?public static void input()
          ?{
          ??BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
          ??try
          ??{
          ???s=in.readLine();
          ??}catch (IOException e){}
          ??
          ?}
          ?static public float getFloat()
          ?{
          ??
          ??input();//調(diào)用input方法
          ??return Float.parseFloat(s);
          ? }
          }


          class Equation? //建造一個(gè)表示方程式的類(lèi)
          {
          ?float a,b,c,disc=0;
          ?void input()? //三個(gè)參數(shù)輸入的方法
          ?{
          ??System.out.println("請(qǐng)輸入3個(gè)參數(shù) a,b,c:");
          ??System.out.println("a=");
          ??a=InputData.getFloat();//調(diào)用自定義的InputData類(lèi)中的input方法
          ??System.out.println("b=");
          ??b=InputData.getFloat();
          ??System.out.println("c=");
          ??c=InputData.getFloat();
          ?}
          ?void getRoots() //獲得根的方法
          ?{?? double x1, x2;
          ???? double realpart,imagpart;
          ??if (Math.abs(a)<1e-5)//判斷是否為一元二次方程
          ??{
          ???System.out.println("這不是一個(gè)一元二次方程");
          ????? System.exit(0);//退出程序
          ??}
          ??else
          ??{
          ???System.out.println("這是一個(gè)一元二次方程");
          ???disc=b*b-4*a*c;
          ?????
          ???if(disc<=1e-5)
          ???{
          ????x1=(-b)/(2*a);
          ????x2=(-b)/(2*a);
          ????System.out.println("此一元二次方程有兩個(gè)相等的根:x1=x2="+x1);
          ???}
          ???else if(disc>1e-5)
          ???{
          ????x1=(-b+Math.sqrt(disc))/(2*a);
          ????x2=(-b-Math.sqrt(disc))/(2*a);
          ????System.out.println("這個(gè)一元二次方程有兩個(gè)實(shí)根:"+"\nx1="+x1+"\nx2"+x2);
          ???}
          ???else
          ???{
          ????realpart=(-b)/2*a;
          ????imagpart=Math.sqrt(-disc);
          ????System.out.println("這個(gè)一元二次方程有兩個(gè)復(fù)數(shù)根:");
          ????System.out.println("x1="+realpart+"+"+imagpart+"i");
          ????System.out.println("x2="+realpart+"-"+imagpart+"i");
          ???}
          ??}
          ??
          ? }?
          }
          ?

          /**
          ?* @author Administrator
          ?*
          ?*/
          public class roots //主類(lèi)
          {
          ?public static void main (String[] args)
          ?{
          ??Equation e=new Equation();
          ??e.input();
          ??e.getRoots();
          ??
          ?}
          }

          ?

          ?

          ?

          ?

          ?

          ?

          ?

          ?

          ?


          ?

          posted @ 2006-07-19 14:48 firslien 閱讀(351) | 評(píng)論 (0)編輯 收藏

          其實(shí)這兩個(gè)概念并不是很難理解,但是網(wǎng)上很多文章都講得有點(diǎn)復(fù)雜,有的提到用反匯編器來(lái)看程序執(zhí)行過(guò)程,的確這是一個(gè)好辦法,很清楚.但是對(duì)于一個(gè)初學(xué)者來(lái)說(shuō)確實(shí)看不懂,反而還會(huì)使得他覺(jué)得這兩個(gè)概念很難理解,越搞越亂.

          下面我就來(lái)說(shuō)下我經(jīng)過(guò)對(duì)網(wǎng)上資料的整理寫(xiě)了一篇對(duì)String和StringBuffer的簡(jiǎn)單看法:


          1. String類(lèi)一旦建立是不可修改的??屬于字符串常量[/size]
          ??
          ?? StringBuffer類(lèi) 是可以修改的
          ??
          通過(guò)下面這個(gè)例子我們就能很清楚地了解:

          public class compare
          {
          ?????? public static void main(String args[])
          ?????? {
          ???????????? String s1="a";
          ???????????? StringBuffer sb1=new StringBuffer("a");
          ??
          ???????????? StringBuffer sb2=sb1;
          ???????????? String s2="a"+"b";
          ???????????? sb1.append("b");
          ????
          ???????????? System.out.println(s1==s2);
          ???????????? System.out.println(sb1==sb2);
          ??????????????
          ???????????? System.out.println(s1);
          ??
          ??????????}
          }

          ?????????? 運(yùn)行結(jié)果:
          ?????????? false
          ?????????? true
          ?????????? a

          ??????這樣我們可以看出來(lái)用String來(lái)聲明的變量是不可變的,即使我們使用了sb1.append("b");這樣一個(gè)語(yǔ)句,但是從輸出結(jié)果可以看出s1仍然是a并沒(méi)有發(fā)生改變。 而StringBuffer聲明的變量是可以改變的所以運(yùn)行結(jié)果是true。

          2.對(duì)字符串使用==來(lái)進(jìn)行比較String的特殊性
          用==來(lái)比較字符串,與equalse方法不同的是,==不是比較兩個(gè)字符串的值是否相等,而是比較幾個(gè)字符串的引用是否指向同一個(gè)實(shí)例。
          public class c2
          {
          ??????????public static void main(String args[])
          ??????{
          ??????????String s1="a";
          ??????????String s2="a";
          ??????????String s3=new String("a");
          ??????????String s4=new String("a");

          ??????????System.out.println(s1==s2);
          ??????????System.out.println(s3==s4);
          ??????????System.out.println(s1==s3);
          ??
          ??????}
          ????上面的程序段輸出:
          ?? true
          ????false
          ????false


          ????????
          ???????? 與上例進(jìn)行比較,不僅可以看出來(lái)==與equals的區(qū)別,還可以看到字面量的String的特殊之外。
          ??????對(duì)于字面量的String,只要字符串的值是相等的,不論有多少個(gè)引用都是指向同一塊內(nèi)存,不再另外分配空間。而用new關(guān)鍵字生成的實(shí)例則不同,每當(dāng)用new實(shí)例化一次,分配該實(shí)例自己的內(nèi)存空間。



          3.字符串equals()的比較方法
          ?????? String類(lèi)提供了一些方法,用來(lái)進(jìn)行字符串的比較。這個(gè)類(lèi)實(shí)現(xiàn)了Object父類(lèi)的equals()方法,用來(lái)比較兩種字符串的值是否相等。同時(shí)還增加了equalsIgnoreCase()方法可以忽略?xún)蓚€(gè)字符串大小寫(xiě)的區(qū)別。下面是這兩種方法的例子。

          public class b1
          {
          ??????public static void main(String args[])
          ?? {
          ???????? String s1="a";
          ???????? String s2=new String("a");
          ???????? String s3="A";
          ???????? System.out.println(s1.equals(s2));
          ???????? System.out.println(s1.equals(s3));
          ???????? System.out.println(s1.equalsIgnoreCase(s3));
          ????}
          }

          上例的輸出是:
          true
          flase
          true

          但是StringBuffer類(lèi)并沒(méi)有實(shí)現(xiàn)Objcet類(lèi)的Equals方法,所以不能用這個(gè)方法來(lái)比較兩個(gè)StringBuffer類(lèi)的字符串是否相等,如下例所示。

          public class b2
          {
          ?????????? public static void main(String args[])
          ????????????{
          ???????????????? StringBuffer s1=new StringBuffer("a");
          ???????????????? StringBuffer s2=new StringBuffer("a");
          ???????????????? System.out.println(s1.equals(s2));
          ??
          ???????????? }
          }
          程序輸出:false
          但是StringBuffer類(lèi)并沒(méi)有實(shí)現(xiàn)Objcet類(lèi)的Equals方法,所以不能用這個(gè)方法來(lái)比較兩個(gè)StringBuffer類(lèi)的字符串是否相等.

          posted @ 2006-07-19 11:56 firslien 閱讀(285) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題  
          主站蜘蛛池模板: 东方市| 台北市| 胶州市| 洞口县| 龙州县| 清原| 孟津县| 陵水| 江阴市| 云和县| 庆安县| 仁寿县| 清水县| 万山特区| 平顺县| 兖州市| 汤阴县| 鹰潭市| 江山市| 财经| 洛川县| 江油市| 安图县| 土默特左旗| 分宜县| 宝清县| 平乐县| 如东县| 古浪县| 靖江市| 谢通门县| 微山县| 台东县| 随州市| 嘉义市| 晋城| 如皋市| 新郑市| 上饶县| 湖口县| 永顺县|