選擇排序:數組中的每個元素和其他元素進行比較換位置 arr[i]>arr[j]
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSPVRlTysmeiFDatVGcoJzYxgnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1YTM5ATNwQTMxAjNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
冒泡排序:相鄰元素換位置 arr[j]>arr[j+1]
變量直接聲明在類體裡面, 方法外面,代碼塊的外面 全局變量(成員變量)
變量除了全局變量就是局部變量
成員變量和局部變量的差別:
成員變量定義在類中方法外代碼塊的外面 局部變量定義在方法中或者代碼塊裡面
局部變量使用前必須要指派
成員變量進堆記憶體 局部變量進棧記憶體
this關鍵字:區分成員變量和局部變量同名情況 成員變量用this. 來調用
在構造方法之間調用 this();
二分查找前要記得排序。
繼承的好處:提高了代碼的複用性,提高了代碼的維護性,讓類與類之間産生了關系,是多态的前提
繼承的弊端:類的耦合性增加了(開發的原則是高内聚,低耦合)
繼承要注意的地方:子類隻能繼承父類所有的非私有的成員,子類不能繼承父類的構造方法,但可以通過super關鍵子去通路父類的構造方法
子類方法覆寫父類方法,必須保證權限大于等于父類權限
Java中有多繼承麼?
類沒有多繼承 接口之間有多繼承
接口和抽象類的差別:
相同點:都不能執行個體化 都必須被子類重寫抽象方法
不同點:
1.抽象類可以有構造方法,接口中不能有構造方法。
2.抽象類中可以有普通成員變量,接口中沒有普通成員變量
3.抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的
4. 抽象類中可以包含靜态方法,接口中不能包含靜态方法
5. 抽象類和接口中都可以包含靜态成員變量,抽象類中的靜态成員變量的通路類型可以任意,但接口中定義的變量隻能是public static final類型
6. 一個類可以實作多個接口,但隻能繼承一個抽象類。
抽象方法隻能放到抽象類中
public abstract class Demo {
public abstract void show();
}
接口常用的變量和方法
public interface Demo {
public static final int i=1;
public abstract void show();
}
多态中,成員特點
成員變量:(編譯運作全看父類)
編譯時,參考父類中有沒有這個變量,如果有,編譯成功,沒有編譯失敗
運作時,運作的是父類中的變量值
成員方法:(編譯看父類,運作看子類)
編譯時,參考父類中有沒有這個方法,如果有,編譯成功,沒有編譯失敗
運作時,運作的是子類的重寫方法
靜态成員變量和方法:
編譯和運作都看父類
Instanceof:比較引用資料類型
比較一個引用類型的變量是不是這個類型的對象
面向對象的三大特征:封裝、繼承、多态
封裝:封裝給對象提供了隐藏内部特性和行為的能力,對象提供了一些能被其他對象通路的方法來改變它内部的資料
繼承:繼承發生在子父類之間,子類繼承父類所有的可繼承的屬性和方法
多态:多态的前提是繼承,可以了解為同一種物質的多種形态
多态就是父類引用指向子類對象
多态弊端:不能調用子類特有的方法
構造方法在new的時候自動執行,隻執行一次
子類調用父類的構造方法
super()調用的是父類的空參數構造 super(參數)調用的是父類的有參數的構造方法
final修飾類、方法、屬性
final修飾類這個類不能被繼承 修飾方法不能被重寫 修飾變量為常量,隻能指派一次
如何實作對象的共享資料,在資料的前面加上static修飾
public class Person {
String name;
static String className;
}
public class Demo {
public static void main(String[] args) {
Person p1=new Person();
Person p2=new Person();
p1.name="哈哈";
p2.name="呵呵";
System.out.println(p1.name+"..."+p2.name);
//對象調用類的靜态成員變量
p1.className="基礎班";
System.out.println(p2.className);
//也可以直接類名調用
System.out.println(Person .className);
}
}
static關鍵字特點:
随着類的加載而加載 優先于對象存在 被所有對象所共享 可以直接被類名調用
匿名對象:沒有名字的對象
應用場景:隻調用一次的時候,匿名對象可以作為實際參數傳遞,可以作為方法的傳回值
問題:
10.選擇排序 {12,23,34,-23,56,25}
11.冒泡排序 {12,23,34,-23,56,25}
12.折半查找 {12,23,25,34,56} 折半查找前 必須要排好序
13.===========超市管理系統========== 實作增删改查
1.貨物清單 2.添加新貨物 3.删除貨物 4.修改貨物 5.退出系統
(商品編号 商品名稱 商品單價)
根據案例介紹,我們進行分析,首先需要一個功能菜單,然後輸入功能序号後,調用序号對應的功能方法,實作想要的操作。分析步驟如下
1.完成超市商品初始化。建立商品,将商品添加到集合
2.顯示來到超市能做的操作,也就是顯示主菜單
3.根據接收到的功能選項,執行對應的功能
3.1.庫存貨物查詢
3.2.添加新貨物
3.3.删除貨物
3.4.修改貨物
3.5.退出系統,結束main方法的運作
4.循環,回到 2.顯示主菜單
14.随機學生 利用集合
15.如何在建立子類的情況下 列印出父類的變量 子父類重名的情況下使用
16.原先手機有打電話,發短信 顯示來電号碼 新手機在原有的基礎上加了大頭貼和來電姓名
17.this關鍵字在構造方法之間調用 調用自己類的構造方法
18.描述學生和勞工這兩個類,将他們的共性name和age抽取出來放到父類中,并提供相應的get和set方法,
同時需要在建立學生和勞工對象就必須明确姓名和年齡.
19.某IT公司有多名員工,按照員工負責的工作不同,進行了劃分,JavaEE工程師,網絡維護工程師
工作内容:
JavaEE工程師:員工号為xxx的xxx員工,正在開發網站
網絡維護工程師:員工号為xxx的xxx員工,正在檢查網絡是否暢通
(新增 強化Answer13的問題)
學生管理系統之學号不存在問題(對應上面的商品編号是否存在)
學生管理系統之學号重複問題(對應上面的商品編号是否重複)
public class Student {
//學号
private String sid;
//姓名
private String name;
//年齡
private String age;
}
/*
學生管理系統
*/
public class StudentManager {
public static void main(String[] args) {
//建立集合對象,用于存儲學生資料
ArrayList<Student> array = new ArrayList<Student>();
//用循環完成再次回到主界面
while (true) {
//用輸出語句完成主界面的編寫
System.out.println("--------歡迎來到學生管理系統--------");
System.out.println("1 添加學生");
System.out.println("2 删除學生");
System.out.println("3 修改學生");
System.out.println("4 檢視所有學生");
System.out.println("5 退出");
System.out.println("請輸入你的選擇:");
//用Scanner實作鍵盤錄入資料
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
//用switch語句完成操作的選擇
switch (line) {
case "1":
addStudent(array);
break;
case "2":
deleteStudent(array);
break;
case "3":
// System.out.println("修改學生");
updateStudent(array);
break;
case "4":
findAllStudent(array);
break;
case "5":
System.out.println("謝謝使用");
System.exit(0); //JVM退出
}
}
}
//定義一個方法,用于添加學生資訊
/*
public static void addStudent(ArrayList<Student> array) {
//鍵盤錄入學生對象所需要的資料,顯示提示資訊,提示要輸入何種資訊
Scanner sc = new Scanner(System.in);
System.out.println("請輸入學生學号:");
String sid = sc.nextLine();
System.out.println("請輸入學生姓名:");
String name = sc.nextLine();
System.out.println("請輸入學生年齡:");
String age = sc.nextLine();
System.out.println("請輸入學生居住地:");
String address = sc.nextLine();
//建立學生對象,把鍵盤錄入的資料指派給學生對象的成員變量
Student s = new Student();
s.setSid(sid);
s.setName(name);
s.setAge(age);
s.setAddress(address);
//将學生對象添加到集合中
array.add(s);
//給出添加成功提示
System.out.println("添加學生成功");
}
*/
public static void addStudent(ArrayList<Student> array) {
//鍵盤錄入學生對象所需要的資料,顯示提示資訊,提示要輸入何種資訊
Scanner sc = new Scanner(System.in);
//為了讓sid在while循環外面被通路到,我們就把它定義在了循環外
String sid;
//為了讓程式能夠回到這裡,我們使用循環實作
while (true) {
System.out.println("請輸入學生學号:");
sid = sc.nextLine();
boolean flag = isUsed(array, sid);
if (flag) {
System.out.println("你輸入的學号已經被使用,請重新輸入");
} else {
break;
}
}
System.out.println("請輸入學生姓名:");
String name = sc.nextLine();
System.out.println("請輸入學生年齡:");
String age = sc.nextLine();
System.out.println("請輸入學生居住地:");
String address = sc.nextLine();
//建立學生對象,把鍵盤錄入的資料指派給學生對象的成員變量
Student s = new Student();
s.setSid(sid);
s.setName(name);
s.setAge(age);
s.setAddress(address);
//将學生對象添加到集合中
array.add(s);
//給出添加成功提示
System.out.println("添加學生成功");
}
//定義一個方法,判斷學号是否被使用
public static boolean isUsed(ArrayList<Student> array, String sid) {
//如果與集合中的某一個學生學号相同,傳回true;如果都不相同,傳回false
boolean flag = false;
for(int i=0; i<array.size(); i++) {
Student s = array.get(i);
if(s.getSid().equals(sid)) {
flag = true;
break;
}
}
return flag;
}
//定義一個方法,用于檢視學生資訊
/*
public static void findAllStudent(ArrayList<Student> array) {
//顯示表頭資訊
//\t 其實就是tab鍵的位置
System.out.println("學号\t\t\t姓名\t\t年齡\t\t居住地");
//将集合中資料取出按照對應格式顯示學生資訊,年齡顯示補充“歲”
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "歲\t\t" + s.getAddress());
}
}
*/
public static void findAllStudent(ArrayList<Student> array) {
//判斷集合中是否有資料,如果沒有顯示提示資訊
if (array.size() == 0) {
System.out.println("無資訊,請先添加資訊再查詢");
//為了讓程式不在往下執行,給出return;
return;
}
//顯示表頭資訊
//\t 其實就是tab鍵的位置
System.out.println("學号\t\t\t姓名\t\t年齡\t\t居住地");
//将集合中資料取出按照對應格式顯示學生資訊,年齡顯示補充“歲”
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
System.out.println(s.getSid() + "\t" + s.getName() + "\t" + s.getAge() + "歲\t\t" + s.getAddress());
}
}
//定義一個方法,用于删除學生資訊
/*
public static void deleteStudent(ArrayList<Student> array) {
//鍵盤錄入要删除的學生學号,顯示提示資訊
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你要删除的學生的學号:");
String sid = sc.nextLine();
//周遊集合将對應學生對象從集合中删除
for(int i=0; i<array.size(); i++) {
Student s = array.get(i);
if(s.getSid().equals(sid)) {
array.remove(i);
break;
}
}
//給出删除成功提示
System.out.println("删除學生成功");
}
*/
public static void deleteStudent(ArrayList<Student> array) {
//鍵盤錄入要删除的學生學号,顯示提示資訊
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你要删除的學生的學号:");
String sid = sc.nextLine();
//在删除/修改學生操作前,對學号是否存在進行判斷
//如果不存在,顯示提示資訊
//如果存在,執行删除/修改操作
int index = -1;
for (int i = 0; i < array.size(); i++) {
Student s = array.get(i);
if (s.getSid().equals(sid)) {
// int index = i;
index = i;
break;
}
}
if (index == -1) {
System.out.println("該資訊不存在,請重新輸入");
} else {
array.remove(index);
//給出删除成功提示
System.out.println("删除學生成功");
}
}
//定義一個方法,用于修改學生資訊
public static void updateStudent(ArrayList<Student> array) {
//鍵盤錄入要修改的學生學号,顯示提示資訊
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你要修改的學生的學号:");
String sid = sc.nextLine();
//鍵盤錄入要修改的學生資訊
System.out.println("請輸入學生新姓名:");
String name = sc.nextLine();
System.out.println("請輸入學生新年齡:");
String age = sc.nextLine();
System.out.println("請輸入學生新居住地:");
String address = sc.nextLine();
//建立學生對象
Student s = new Student();
s.setSid(sid);
s.setName(name);
s.setAge(age);
s.setAddress(address);
//周遊集合修改對應的學生資訊
for (int i = 0; i < array.size(); i++) {
Student student = array.get(i);
if (student.getSid().equals(sid)) {
array.set(i, s);
break;
}
}
//給出修改成功提示
System.out.println("修改學生成功");
}
}
public class Answer10 {
public static void main(String[] args) {
int [] arr={12,23,34,-23,56,25};
selectSort(arr);
show(arr);
}
public static void selectSort(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
public static void show(int [] arr){
System.out.print("[");
for(int i=0;i<arr.length;i++){
if(i!=arr.length-1){
System.out.print(arr[i]+",");
}else{
System.out.print(arr[i]+"]");
}
}
}
}
public class Answer11 {
public static void main(String[] args) {
int [] arr={12,23,34,-23,56,25};
bubbleSort(arr);
show(arr);
}
public static void bubbleSort(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
//每次内循環的比較,從0索引開始,每次都在遞減
for (int j = 0; j < arr.length-1-i; j++) { //冒泡減1是為了防止j+1越界異常
if(arr[j]>arr[j+1]){
int temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
}
public static void show(int [] arr){
System.out.print("[");
for(int i=0;i<arr.length;i++){
if(i!=arr.length-1){
System.out.print(arr[i]+",");
}else{
System.out.print(arr[i]+"]");
}
}
}
}
/*
* 折半公式(min+max)/2
* 指針思想
* 折半後的指針索引和被查找元素比較
* 元素>中間索引上的元素
* 小指針=中間+1
* 元素<中間索引上的元素
* 大指針=中間-1
* */
public class Answer12 {
public static void main(String[] args) {
int[] arr={12,23,25,34,56};
int index=binarySearch(arr,25);
System.out.println(index);
}
public static int binarySearch(int [] arr,int key){
//定義三個指針變量
int min=0;
int max=arr.length-1;
int mid=0;
while(min<=max){
//公式,計算中間索引
mid=(min+max)/2;
//讓被找元素,和中間元素進行比較
if(key>arr[mid]){
min=mid+1;
}else if(key<arr[mid]){
max=mid-1;
}else{
//找到元素,傳回元素索引
return mid;
}
}
return -1;
}
}
import java.util.ArrayList;
import java.util.Scanner;
public class Answer13 {
public static void main(String[] args) {
ArrayList<FruitItem> array=new ArrayList<>();
init(array);
while(true){
mainMenu();
int num=chooseFunction();
switch (num) {
case 1:
showFruitItem(array);
break;
case 2:
addFruit(array);
break;
case 3:
deleteFruit(array);
break;
case 4:
updateFruit(array);
break;
case 5:
System.out.println("你已退出本管理系統");
return ;
default:
System.out.println("請輸入正确的序号");
break;
}
}
}
public static void updateFruit(ArrayList<FruitItem> array){
System.out.println("您現在操作的是商品修改功能");
Scanner sc=new Scanner(System.in);
System.out.println("請輸入你要修改的商品編号");
int ID=sc.nextInt();
for(int i=0;i<array.size();i++){
FruitItem item=array.get(i);
if(item.ID==ID){
System.out.println("請輸入新的商品編号");
item.ID=sc.nextInt();
System.out.println("請輸入新的商品名稱");
item.brand=sc.next();
System.out.println("請輸入新的商品單價");
item.price=sc.nextDouble();
System.out.println("恭喜你修改商品成功");
return;
}
}
System.out.println("你輸入的商品編号不存在");
}
public static void deleteFruit(ArrayList<FruitItem> array){
System.out.println("您現在操作的是商品删除功能");
Scanner sc=new Scanner(System.in);
System.out.println("請輸入你要删除的商品編号");
int ID=sc.nextInt();
for(int i=0;i<array.size();i++){
FruitItem item=array.get(i);
if(item.ID==ID){
array.remove(i);
System.out.println("恭喜你删除商品成功");
return ;
}
}
System.out.println("你輸入的商品編号不存在");
}
public static void addFruit(ArrayList<FruitItem> array){
System.out.println("您現在操作的是商品添加功能");
Scanner sc=new Scanner(System.in);
FruitItem item=new FruitItem();
System.out.println("請輸入你要添加的商品編号");
item.ID=sc.nextInt();
System.out.println("請輸入你要添加的商品名稱");
item.brand=sc.next();
System.out.println("請輸入你要添加的商品單價");
item.price=sc.nextDouble();
array.add(item);
System.out.println("恭喜你添加商品成功");
}
public static void showFruitItem(ArrayList<FruitItem> array){
System.out.println();
System.out.println("=============商品庫存清單=============");
System.out.println("商品編号 商品名稱 商品單價");
for(int i=0;i<array.size();i++){
FruitItem fi=array.get(i);
System.out.println(fi.ID+" "+fi.brand+" "+fi.price);
}
}
public static int chooseFunction(){
return new Scanner(System.in).nextInt();
}
public static void mainMenu(){
System.out.println();
System.out.println("==============歡迎光臨Itcast水果超市==============");
System.out.println("1.貨物清單 2.添加新貨物 3.删除貨物 4.修改貨物 5.退出系統");
System.out.println("請您輸入要操作的需要");
}
public static void init(ArrayList<FruitItem> array){
FruitItem f1=new FruitItem();
f1.ID=1001;
f1.brand="西瓜";
f1.price=12.5;
FruitItem f2=new FruitItem();
f2.ID=1002;
f2.brand="蘋果";
f2.price=16.0;
FruitItem f3=new FruitItem();
f3.ID=1003;
f3.brand="人生果";
f3.price=50.0;
array.add(f1);
array.add(f2);
array.add(f3);
}
}
class FruitItem{
int ID;
String brand;
double price;
}
public class NewStudent {
private String name;
private int ag;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAg() {
return ag;
}
public void setAg(int ag) {
this.ag = ag;
}
}
import java.util.ArrayList;
import java.util.Random;
public class Answer14 {
public static void main(String[] args) {
ArrayList<NewStudent> array=new ArrayList<>();
addStudent(array);
showStudent(array);
randomStudent(array);
}
public static void randomStudent(ArrayList<NewStudent> array){
Random ran=new Random();
int index=ran.nextInt(array.size());
NewStudent ns=array.get(index);
System.out.println(ns.getName()+"..."+ns.getAg());
}
public static void showStudent(ArrayList<NewStudent> array){
for(int i=0;i<array.size();i++){
NewStudent s=array.get(i);
System.out.println(s.getName()+"...."+s.getAg());
}
}
public static void addStudent(ArrayList<NewStudent> array){
NewStudent ns1=new NewStudent();
ns1.setName("張三1");
ns1.setAg(151);
NewStudent ns2=new NewStudent();
ns2.setName("張三2");
ns2.setAg(152);
NewStudent ns3=new NewStudent();
ns3.setName("張三3");
ns3.setAg(153);
NewStudent ns4=new NewStudent();
ns4.setName("張三4");
ns4.setAg(154);
NewStudent ns5=new NewStudent();
ns5.setName("張三5");
ns5.setAg(155);
array.add(ns1);
array.add(ns2);
array.add(ns3);
array.add(ns4);
array.add(ns5);
}
}
public class Answer15 {
public static void main(String[] args) {
Zi zi=new Zi();
zi.show();
}
}
class Fu{
int i=1;
}
class Zi extends Fu{
int i=2;
public void show(){
int i=3;
System.out.println(i);
System.out.println(this.i);
System.out.println(super.i);
}
}
public class Answer16 {
public static void main(String[] args) {
AndroidPhone ad=new AndroidPhone();
ad.call();
ad.sendMessage();
ad.show();
}
}
class Phone{
public void call(){
System.out.println("打電話了");
}
public void sendMessage(){
System.out.println("發消息了");
}
public void show(){
System.out.println("顯示來電号碼了");
}
}
class AndroidPhone extends Phone{
public void show(){
super.show(); //調用了父類的方法 -----
System.out.println("大頭貼");
System.out.println("來電姓名");
}
}
public class Person {
private String name;
private int age;
public Person(){
//調用了有參數的構造方法 參數 張三 18傳給了變量name 和 age
this("張三",18);
}
public Person(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Answer17 {
public static void main(String[] args) {
Person p=new Person();
System.out.println(p.getName()+"..."+p.getAge());
}
}
public class Person {
private String name;
private int age;
public Person(String name,int age){
super();
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Student extends Person{
public Student(String name, int age) {
super(name, age);
}
}
public class Worker extends Person{
public Worker(String name, int age) {
super(name, age);
}
}
public class Answer18 {
public static void main(String[] args) {
Student s=new Student("張三",18);
Worker w=new Worker("李四",20);
System.out.println(s.getName()+"..."+s.getAge());
System.out.println(w.getName()+"..."+w.getAge());
}
}
public abstract class Employee {
private String name;
private int age;
public Employee(String name, int age) {
super();
this.name = name;
this.age = age;
}
public abstract void work();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class JavaEE extends Employee{
public JavaEE(String name, int age) {
super(name, age);
}
public void work() {
System.out.println("員工号為"+super.getName()+"..."+"年齡為"+super.getAge()+",正在開發網站");
}
}
public class Maintainer extends Employee{
public Maintainer(String name, int age) {
super(name, age);
}
public void work() {
System.out.println("員工号為"+super.getName()+"..."+"年齡為"+super.getAge()+",正在檢查網絡是否暢通");
}
}
public class Answer19 {
public static void main(String[] args) {
JavaEE javaEE=new JavaEE("張三",18);
Maintainer maintainer=new Maintainer("李四", 20);
javaEE.work();
maintainer.work();
}
}