【Java2】一维数组,家庭收支界面,/属性和方法,方法重载,变量分类,可变参数,包
生活随笔
收集整理的這篇文章主要介紹了
【Java2】一维数组,家庭收支界面,/属性和方法,方法重载,变量分类,可变参数,包
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 1.一維數(shù)組:int[ ] a = { }
- 1.1 數(shù)組的內(nèi)存分析(靜態(tài)):數(shù)組名=首地址
- 1.2 數(shù)組的內(nèi)存分析(動態(tài)):元素默認值
- 1.3 數(shù)組相關(guān)算法:
- 1.3.1 找最值:array[i] > max
- 1.3.2 平均值:.length
- 1.3.3 反轉(zhuǎn):最后一位向i反方向移
- 1.3.4 復(fù)制:=
- 1.3.5 順序查找:==
- 1.3.6 二分查找:arr[mid] ==
- 1.3.7 冒泡排序:兩兩比較,temp交換
- 1.3.8 直接排序:min和index,temp
- 2.家庭收支界面:/t
- 2.1 FamilyAccount.java
- 2.2 Utility.java
- 3.屬性和方法:if elseif else,成/局變量
- 3.1 屬性內(nèi)存分析:new堆中新開辟
- 3.2 方法內(nèi)存分析:值/引用傳遞
- 4.方法重載:內(nèi)存地址==
- 5.變量分類:方法的參數(shù)
- 6.可變參數(shù):[ ]或...
- 7.帶包的類:-d
1.一維數(shù)組:int[ ] a = { }
1.1 數(shù)組的內(nèi)存分析(靜態(tài)):數(shù)組名=首地址
1.2 數(shù)組的內(nèi)存分析(動態(tài)):元素默認值
1.3 數(shù)組相關(guān)算法:
1.3.1 找最值:array[i] > max
1.3.2 平均值:.length
1.3.3 反轉(zhuǎn):最后一位向i反方向移
如下第0位=最后一位,最后一位=第0位,交換。
1.3.4 復(fù)制:=
如下是Copy_02。
1.3.5 順序查找:==
1.3.6 二分查找:arr[mid] ==
1.3.7 冒泡排序:兩兩比較,temp交換
1.3.8 直接排序:min和index,temp
2.家庭收支界面:/t
如下2314
2.1 FamilyAccount.java
class FamilyAccount{public static void main(String[] args){ java.util.Scanner input = new java.util.Scanner(System.in);boolean flag = true; int balance = 10000;//基本金String details = "收支\t賬戶金額\t收支金額\t說 明\n"; //選擇1時才顯示while(flag){System.out.println("-----------------家庭收支記賬軟件-----------------");System.out.println("\t\t1 收支明細");System.out.println("\t\t2 登記收入");System.out.println("\t\t3 登記支出");System.out.println("\t\t4 退 出");System.out.print("請選擇(1-4):");int select = input.nextInt();//接收用戶的選擇 //判斷用戶的選擇,進行對應(yīng)的操作switch(select){case 1:System.out.println(details);break;case 2:System.out.print("本次收入金額:");int money = input.nextInt();System.out.print("本次收入說明:");String info = input.next();balance += money;//收入 1000 11000 勞務(wù)費details += "收入\t" + money + "\t\t" + balance + "\t\t" + info + "\n";break;case 3:System.out.print("本次支出金額:");money = input.nextInt(); // 這里不用寫成int money,前面已經(jīng)定義過且局部變量沒遇到大括號,聲明在編譯中搞定System.out.print("本次支出說明:");info = input.next();balance -= money;//支出 800 10200 物業(yè)費details += "支出\t" + money + "\t\t" + balance + "\t\t" + info + "\n";break;case 4:System.out.print("確認是否退出(Y/N):");char confirm = input.next().charAt(0);if(confirm == 'Y' || confirm =='y'){flag = false;}}}} } // FamilyAccount_2.java改進版 class FamilyAccount_2{public static void main(String[] args){boolean flag = true; int balance = 10000;//基本金String details = "收支\t賬戶金額\t收支金額\t說 明\n";while(flag){System.out.println("-----------------家庭收支記賬軟件-----------------");System.out.println("\t\t1 收支明細");System.out.println("\t\t2 登記收入");System.out.println("\t\t3 登記支出");System.out.println("\t\t4 退 出");System.out.print("請選擇(1-4):");//類似于:double d = Math.random()//類似于:double d = Math.sqrt(x)char select = Utility.readMenuSelection();//接收用戶的選擇//判斷用戶的選擇,進行對應(yīng)的操作switch(select){case '1':System.out.println(details);break;case '2':System.out.print("本次收入金額:");int money = Utility.readNumber();System.out.print("本次收入說明:");String info = Utility.readString();balance += money;//收入 1000 11000 勞務(wù)費details += "收入\t" + money + "\t\t" + balance + "\t\t" + info + "\n";break;case '3':System.out.print("本次支出金額:");money = Utility.readNumber();System.out.print("本次支出說明:");info = Utility.readString();balance -= money;//支出 800 10200 物業(yè)費details += "支出\t" + money + "\t\t" + balance + "\t\t" + info + "\n";break;case '4':System.out.print("確認是否退出(Y/N):");char confirm = Utility.readConfirmSelection();if(confirm == 'Y' || confirm =='y'){flag = false;}}}} }2.2 Utility.java
import java.util.*;public class Utility {private static Scanner scanner = new Scanner(System.in); public static char readMenuSelection() {char c;for (; ; ) {String str = readKeyBoard(1);c = str.charAt(0);if (c != '1' && c != '2' && c != '3' && c != '4') {System.out.print("選擇錯誤,請重新輸入:");} else break;}return c;}public static int readNumber() {int n;for (; ; ) {String str = readKeyBoard(4);try {n = Integer.parseInt(str);break;} catch (NumberFormatException e) {System.out.print("數(shù)字輸入錯誤,請重新輸入:");}}return n;}public static String readString() {String str = readKeyBoard(8);return str;}public static char readConfirmSelection() {char c;for (; ; ) {String str = readKeyBoard(1).toUpperCase();c = str.charAt(0);if (c == 'Y' || c == 'N') {break;} else {System.out.print("選擇錯誤,請重新輸入:");}}return c;}private static String readKeyBoard(int limit) {String line = "";while (scanner.hasNext()) {line = scanner.nextLine();if (line.length() < 1 || line.length() > limit) {System.out.print("輸入長度(不大于" + limit + ")錯誤,請重新輸入:");continue;}break;}return line;} }3.屬性和方法:if elseif else,成/局變量
//聲明公民類Citizen,包含屬性:姓名name(String類型),生日birthday(MyDate類型),身份證號cardId(String類型)。創(chuàng)建你們家庭成員的幾個對象,并打印信息。 class Day07_Test03{public static void main(String[] args){//1、創(chuàng)建爸爸的對象Citizen baba = new Citizen();baba.name = "小頭爸爸";baba.cardId = "1111111";baba.birthday = new MyDate(); //baba.birthday是對象名baba.birthday.year = 1967; baba.birthday.month = 5;baba.birthday.day = 2;//111111111111111111111111111111111111111111111111111111111111111111111111111 //2、創(chuàng)建媽媽的對象Citizen mama = new Citizen();mama.name = "圍裙媽媽";mama.cardId = "222222"; MyDate bir = new MyDate();bir.year = 1970;bir.month = 6;bir.day = 1; mama.birthday = bir; // 注意不要忘寫 //111111111111111111111111111111111111111111111111111111111111111111111111111111 System.out.println("爸爸的姓名:" + baba.name + ",身份證號:" + baba.cardId + ",生日:" + baba.birthday.year+"年" + baba.birthday.month + "月" + baba.birthday.day+"日");System.out.println("媽媽的姓名:" + mama.name + ",身份證號:" + mama.cardId + ",生日:" + mama.birthday.year+"年" + mama.birthday.month + "月" + mama.birthday.day+"日");} } class MyDate{int year;int month;int day; } class Citizen{String name;//姓名MyDate birthday;//生日 MyDate雖然是自己寫的類,但是也可以作為Java的數(shù)據(jù)類型String cardId;//身份證號 } /* 聲明一個日期類MyDate,包含屬性:年、月、日,并在MyDate類中聲明幾個方法: 1、boolean isLeapYear():判斷當前日期的是閏年嗎? 2、void set(int y, int m, int d):修改年,月,日為新日期 3、void plus(int y, int m, int d):修改當前日期為加了y年,m月,d天后的日期例如:2019年5月21日, plus(1,1,1)==>2020年6月22日例如:2019年5月21日, plus(1,1,20)==>2020年7月11日 */ class Day07_Test04{public static void main(String[] args){MyDate my = new MyDate();my.year = 2019;my.month = 5;my.day = 21; //my.plus(1,1,1);//my.plus(1,1,20);//my.plus(1,30,70);System.out.println(my.year + "年" + my.month + "月" + my.day);} } class MyDate{int year;int month;int day;boolean isLeapYear(){if(year%4==0 && year%100!=0 || year%400==0){return true;//如果if條件滿足,從這里就把true返回并結(jié)束當前方法}return false;}//用y,m,d為當前對象的year,month,day屬性賦值void set(int y, int m, int d){year = y;month = m;day = d;}//在當前日期的基礎(chǔ)上,加上y年,m月,d天void plus(int y, int m, int d){day += d;month += m;year += y;while(true){if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10){ //31天if(day>31){day -= 31;month++;}}else if(month==4 || month==6 || month==9 || month==11){ //30天if(day>30){day -= 30;month++;}}else if(month==2){ //潤年29天,其他28天if(year%4==0 && year%100!=0 || year%400==0){if(day>29){day -= 29;month++;}}else{if(day>28){day-=28;month++;}}}else if(month == 12){ //31天if(day>31){day-=31;month=1;year++;}}else if(month>12){while(month>12){month -= 12;year++;}}if(month>=1 && month<=12){if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){if(day<=31){break;}}else if(month==4 || month==6 || month==9 || month==11){if(day<=30){break;}}else if(month==2){if(year%4==0 && year%100!=0 || year%400==0){if(day<=29){break;}}else{if(day<=28){break;}}}}}} }3.1 屬性內(nèi)存分析:new堆中新開辟
3.2 方法內(nèi)存分析:值/引用傳遞
/* 方法的參數(shù)傳遞機制:(1)形參是基本數(shù)據(jù)類型:實參賦值給形參的是數(shù)據(jù)值,形參值的修改不影響實參,因為實參是“copy復(fù)制”了一份數(shù)據(jù)值給形參。 (2)形參是引用數(shù)據(jù)類型(涉及堆):實參賦值給形參的是對象的地址值,如果形參修改了對象的屬性值,那么實參對象的屬性值也會修改。 */
如下…方法的…變量。
如上結(jié)果為2.0,增大為原來的兩倍。如下0乘2還是0,綠色單獨成一塊和yuan.radius無關(guān)。
4.方法重載:內(nèi)存地址==
//方法的重載(和返回值類型無關(guān)):在同一個類中,出現(xiàn)了兩個或多個的方法名稱相同,形參列表不同(形參的個數(shù)、數(shù)據(jù)類型不同),稱為方法的重載。 class Test03_Overload{public static void main(String[] args){System.out.println(max(1,4));System.out.println(max(1.0,4.0));System.out.println(max(1,4,8));}//寫一個方法,可以找2個整數(shù)的最大值public static int max(int a, int b){return a>b ? a : b;}//方法重載時,不去看返回值類型是否一致,只看方法名和形參列表。//如下雖然double返回值類型不一樣,但形參一樣,不算函數(shù)重載//public static double max(int a,int b){// return 0.0;//}//寫一個方法,可以找2給小數(shù)的最大值,如下算重載public static double max(double a, double b){return a>b ? a : b;}//寫一個方法,可以找3個整數(shù)的最大值public static int max(int a, int b, int c){int max = a > b ? a : b;max = max > c ? max : c;return max;} } /* 1、聲明一個圖形工具類,包含如下方法:(1)double getTriangleArea(double base,double height) (2)double getTriangleArea(double a,double b, double c) */ class Test06_Exer1{public static void main(String[] args){GraphicTools tools = new GraphicTools();System.out.println("底為3,高為4的三角形面積是:" +tools.getTriangleArea(3,4));System.out.println("三邊為3,4,5的三角形面積是:"+ tools.getTriangleArea(3,4,5)); System.out.println("三邊為1,1,1的三角形面積是:"+ tools.getTriangleArea(1,1,1));} } class GraphicTools{double getTriangleArea(double base,double height){return base * height / 2;} double getTriangleArea(double a,double b, double c){//任意兩邊之和大于第三邊if(a+b>c && a+c>b && b+c>a){double p = (a+b+c)/2;double area = Math.sqrt(p * (p-a) * (p-b) * (p-c));//海倫公式return area;}else{return 0.0;//非三角形}} } // 2、聲明一個數(shù)學(xué)工具類,包含如下方法:(1)可以求0~n字符串的拼接結(jié)果,(2)可以求1~n整數(shù)的乘積 class Test06_Exer2{public static void main(String[] args){MyMath my = new MyMath();System.out.println("拼接結(jié)果:" + my.concat("硅谷", "是","一家","靠譜的","機構(gòu)"));System.out.println("5! = " + my.mutiply(1,2,3,4,5));} } class MyMath{//(1)可以求0~n字符串的拼接結(jié)果String concat(String... args){String str = "";//空字符串for(int i=0; i<args.length; i++){str += args[i];}return str;} //(2)可以求1~n整數(shù)的乘積long mutiply(int a, int... nums){long result = a;for(int i=0; i<nums.length; i++){result *= nums[i];} return result;} }在同一個類中,兩個或者兩個以上方法的名稱一樣,參數(shù)列表不一樣,和返回值無關(guān),這些稱之為方法重載。
重載方法參數(shù)列表必須不同,參數(shù)個數(shù)可以相同。如下fun是函數(shù)定義,不是函數(shù)調(diào)用。
5.變量分類:方法的參數(shù)
/* 變量的分類:1.成員變量:今天討論的都是非靜態(tài)的成員變量(類中方法外)。2.局部變量(方法中)(1)聲明的位置不同 (2)運行時在內(nèi)存中的位置也不相同 成員變量:堆 (new一個對象,用圓點訪問) 局部變量:棧 (方法開辟一段內(nèi)存)(3)初始化不同 成員變量:如果沒有初始化,有默認值 局部變量:如果沒有初始化,就會報錯,不能用(4)生命周期 成員變量:隨著對象的創(chuàng)建而分配,隨著對象被垃圾回收器回收而結(jié)束 局部變量:方法被調(diào)用,開始分配,方法執(zhí)行結(jié)束就結(jié)束(5)可用的修飾符 成員變量:有很多修飾符 局部變量:唯一的一個就是final */如下左邊的小方框都是方法的變量即局部變量。右邊name,age是成員變量,不是常量。string是引用數(shù)據(jù)類型,紅main方法,藍set方法。
6.可變參數(shù):[ ]或…
/* 命令行參數(shù):(了解) 給main方法傳的實參,叫做命令行參數(shù) 格式:java main所在的類名 實參1 實參2 ..例如:java Test04_CommandParam hello java atgui */ class Test04_CommandParam{//因為main也是一個有參無返回值的方法,那么如何給main傳參數(shù)呢?public static void main(String[] args){//args是形參,是String[]類型,是一個一維數(shù)組for(int i=0; i<args.length; i++){System.out.println("第" +(i+1) +"個參數(shù)的值:" + args[i]);}} }
7.帶包的類:-d
/* 1、包的作用:(1)避免類的重名問題,包就是命名空間,避免命名沖突 有了包后,類的名稱就比較長了,類的全名稱就變?yōu)榱?#xff1a;包.類名java.util.Scanner :Scanner類的全名稱java.lang.String:String類的全名稱java.lang.System:System類的全名稱java.lang.Math:Math類的全名稱 (2)分類組織管理眾多的類 java.io:和IO(輸入輸出)有關(guān) java.util:和各種常用工具類有關(guān) java.lang:核心系統(tǒng)類 java.net:和網(wǎng)絡(luò)編程有關(guān) java.sql:和數(shù)據(jù)庫編程有關(guān) (3)用于訪問權(quán)限控制:如果某個類或某個方法的權(quán)限修飾符省略,那么就僅限于本包使用2、如何聲明包?語法格式:package 包名; 這句話有要求:(1)一個.java源文件只能有一句 (2)必須在源文件的代碼首行 包名的命名規(guī)范:(1)所有單詞都小寫,每個單詞之間用.分割 (2)習(xí)慣上用公司的域名倒置 + 模塊名 例如:com.atguigu.xx;com.mysql.xxxcom.alibaba.xxxorg.aphache.xxx 一級域名:com:商業(yè)org:非營利性組織gov:政府edu:教育....3、如何編譯帶包的類:了解:javac -d . 源文件名.java 4、如何運行帶包的類:了解:java 包.類名5、如何使用其他包的類:前提:被使用的類或成員的權(quán)限修飾符得允許跨包使用 方式:(1)使用全名稱:包.類名。(2)使用import語句 + 簡名稱 《1》import 語句是寫在 package語句與class聲明之間的 《2》導(dǎo)包語句可以很多句,導(dǎo)不同包的類 《3》java.lang包中類可以不使用import語句,就直接使用簡名稱。例如:System,String,Math.... 《4》可以同時導(dǎo)入同一個包中的很多類。import 包.*; 《5》如果出現(xiàn)了不同包,但是類名相同。例如:java.util.Date,java.sql.Date,只能一個選擇使用全名稱,一個使用簡名稱,不能同時使用簡名稱。 */ package com.atguigu.pkg; import com.atguigu.bean.*; import java.util.Date; //import java.sql.Date;class Test01_Package{public static void main(String[] args){System.out.println("hello pkg"); Circle c1 = new Circle(1.2); //用另外一個包com.atguigu.bean的類 //com.atguigu.bean.Circle c1 = new com.atguigu.bean.Circle(1.2);c1.printInfo(); Rectangle r1 = new Rectangle(); //同上} }如下和上面代碼無關(guān)。
如下不在ide中自動創(chuàng)建,要自己創(chuàng)建文件夾。
如下不用手動創(chuàng)建文件夾。
總結(jié)
以上是生活随笔為你收集整理的【Java2】一维数组,家庭收支界面,/属性和方法,方法重载,变量分类,可变参数,包的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java1】jdk安装/idea安装,
- 下一篇: 【Java3】封装,对象数组,构造器,t