2006年7月19日

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



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


          class InputData //建造一個(gè)從鍵盤獲取數(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è)表示方程式的類
          {
          ?float a,b,c,disc=0;
          ?void input()? //三個(gè)參數(shù)輸入的方法
          ?{
          ??System.out.println("請輸入3個(gè)參數(shù) a,b,c:");
          ??System.out.println("a=");
          ??a=InputData.getFloat();//調(diào)用自定義的InputData類中的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 //主類
          {
          ?public static void main (String[] args)
          ?{
          ??Equation e=new Equation();
          ??e.input();
          ??e.getRoots();
          ??
          ?}
          }

          ?

          ?

          ?

          ?

          ?

          ?

          ?

          ?

          ?


          ?

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

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

          下面我就來說下我經(jīng)過對網(wǎng)上資料的整理寫了一篇對String和StringBuffer的簡單看法:


          1. String類一旦建立是不可修改的??屬于字符串常量[/size]
          ??
          ?? StringBuffer類 是可以修改的
          ??
          通過下面這個(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

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

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



          3.字符串equals()的比較方法
          ?????? String類提供了一些方法,用來進(jìn)行字符串的比較。這個(gè)類實(shí)現(xiàn)了Object父類的equals()方法,用來比較兩種字符串的值是否相等。同時(shí)還增加了equalsIgnoreCase()方法可以忽略兩個(gè)字符串大小寫的區(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類并沒有實(shí)現(xiàn)Objcet類的Equals方法,所以不能用這個(gè)方法來比較兩個(gè)StringBuffer類的字符串是否相等,如下例所示。

          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類并沒有實(shí)現(xiàn)Objcet類的Equals方法,所以不能用這個(gè)方法來比較兩個(gè)StringBuffer類的字符串是否相等.

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

          主站蜘蛛池模板: 边坝县| 景东| 蛟河市| 鲁甸县| 香格里拉县| 玉田县| 福泉市| 中阳县| 安岳县| 麦盖提县| 济南市| 忻城县| 定日县| 淳化县| 文化| 腾冲县| 河池市| 保山市| 邢台县| 巴塘县| 平顶山市| 息烽县| 十堰市| 玉田县| 西平县| 东港市| 丹棱县| 济源市| 铁岭县| 儋州市| 西宁市| 盘锦市| 江门市| 察雅县| 伽师县| 定州市| 娱乐| 高阳县| 疏附县| 阜康市| 永昌县|