2006年7月19日

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



          //計算一個一元二次方程
          import java.io.*;


          class InputData //建造一個從鍵盤獲取數(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? //建造一個表示方程式的類
          {
          ?float a,b,c,disc=0;
          ?void input()? //三個參數(shù)輸入的方法
          ?{
          ??System.out.println("請輸入3個參數(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("這不是一個一元二次方程");
          ????? System.exit(0);//退出程序
          ??}
          ??else
          ??{
          ???System.out.println("這是一個一元二次方程");
          ???disc=b*b-4*a*c;
          ?????
          ???if(disc<=1e-5)
          ???{
          ????x1=(-b)/(2*a);
          ????x2=(-b)/(2*a);
          ????System.out.println("此一元二次方程有兩個相等的根: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("這個一元二次方程有兩個實根:"+"\nx1="+x1+"\nx2"+x2);
          ???}
          ???else
          ???{
          ????realpart=(-b)/2*a;
          ????imagpart=Math.sqrt(-disc);
          ????System.out.println("這個一元二次方程有兩個復(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) | 評論 (0)編輯 收藏

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

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


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

          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);
          ??
          ??????????}
          }

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

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

          2.對字符串使用==來進行比較String的特殊性
          用==來比較字符串,與equalse方法不同的是,==不是比較兩個字符串的值是否相等,而是比較幾個字符串的引用是否指向同一個實例。
          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


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



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

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

          僅列出標題  
          主站蜘蛛池模板: 定陶县| 吉安县| 金堂县| 邻水| 竹溪县| 贵溪市| 皮山县| 舞阳县| 阿坝| 潮安县| 徐闻县| 华亭县| 塘沽区| 宝清县| 常熟市| 南宁市| 炉霍县| 广州市| 恩施市| 中卫市| 和田县| 北碚区| 铜梁县| 吕梁市| 化隆| 揭西县| 阿拉善盟| 辽阳县| 曲麻莱县| 西峡县| 酉阳| 高密市| 临潭县| 郎溪县| 德令哈市| 乌海市| 东乡县| 宜昌市| 嘉黎县| 黄大仙区| 苍南县|