第4週週報
一、java基礎
二、啊哈演算法
三、複習連結串列
java基礎
1.構造方法:
作用:構造方法是專門用來建立物件的方法,當我們通過關鍵字new來建立物件時,其實就是在呼叫構造方法。
格式: 方法的名字必須和類的名字完全一致。構造方法不允許寫返回值型別,void也不能寫。命名格式如下
public 類名稱(引數型別 引數名稱) {
方法體
}
注意事項:
1.構造方法的名稱要跟所在的類名稱一模一樣,包括大小寫。
2.構造方法沒有返回值型別,連void都不能寫。
3.構造方法不能rerturn一個具體的值作為返回值。
4.如果沒有編寫構造方法,編譯器會預設贈送一個構造方法:public Student(){}
5.如果寫了至少一個構造方法,編譯器將不再贈送。
6.構造方法也能進行過載(方法名稱相同,引數列表不同)
測試程式碼:
定義類:
package day4;
public class Student {
private int age;
private String name;
public Student(){
System.out.println("無引數的構造方法執行!");
}
public Student(int age,String name){
this.age = age;
this.name = name;
System.out.println("全引數的構造方法執行!");
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
main方法:
package day4;
public class student01 {
public static void main(String[] args) {
Student st1 = new Student();
Student st2 = new Student(20,"小娟");
System.out.println("姓名:"+st2.getName());
System.out.println("年齡:"+st2.getAge());
st2.setAge(22);
st2.setName("盧文慧");
System.out.println("姓名:"+st2.getName());
System.out.println("年齡:"+st2.getAge());
}
}
2.匿名物件
作用:經常和Scanner連用。
3.random
題目1:隨機生成1~n範圍的隨機數。
方法:整體+1即可。
題目2:猜數(淼)
直接程式碼:
package day5;
import java.util.Random;
import java.util.Scanner;
public class useRandom03 {
public static void main(String[] args) {
int a = new Random().nextInt(5);
/*System.out.println("請輸入猜的數字:");
int guess = new Scanner(System.in).nextInt();
if(guess==a)
System.out.println("猜對啦");
else if(guess<a)
System.out.println("猜小了");
else
System.out.println("猜大了");*/
while(true){
System.out.println("請輸入猜的數字:");
int guess = new Scanner(System.in).nextInt();
if(guess==a) {
System.out.println("猜對啦");
break;
}
else if(guess<a)
System.out.println("猜小了");
else
System.out.println("猜大了");
}
}
}
4.物件陣列
重點:物件陣列裡面的元素存放的是物件的地址值
package day5;
public class Arry {
public static void main(String[] args) {
Person[] arr = new Person[3];
Person one = new Person(28,"迪麗熱巴");
Person two = new Person(18,"古力娜扎");
Person three = new Person(30,"馬兒扎哈");
arr[0] = one;
arr[1] = two;
arr[2] = three;
System.out.println(arr[0].getName()+" 年齡:"+ arr[0].getAge());
System.out.println(arr[1].getName()+" 年齡:"+ arr[1].getAge());
System.out.println(arr[2].getName()+" 年齡:"+ arr[2].getAge());
}
}
比如arr[0] = one中就是把one裡面存放的地址值賦給了arr【0】所以後面才能用arr[0].age.
5.ArryList
格式:ArrayList list = new ArrayList<>();
1.常用方法:
演示:
package day5;
import java.util.ArrayList;
public class demoArryList {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("迪麗熱巴");
list.add("古力娜扎");
list.add("馬爾扎哈");
System.out.println(list);
String a = list.get(0);
System.out.println(a);
list.remove(2);
System.out.println(list);
int size = list.size();
System.out.println(size);
//遍歷集合:
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
題目1.新增隨機數:
package day5;
import java.util.ArrayList;
import java.util.Random;
public class addRandomTOArryList {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < 6; i++) {
list.add(new Random().nextInt(33)+1);
}
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
題目2.新增物件到集合:自定義四個學生物件新增到集合,並遍歷。
package day5;
import java.util.ArrayList;
public class solutionaddstudent {
public static void main(String[] args) {
Student one = new Student("趙麗穎",20);
Student two = new Student("迪麗熱巴",22);
Student three = new Student("古力娜扎",26);
Student four = new Student("馬爾扎哈",200);
ArrayList<Student> list = new ArrayList<>();
list.add(one);
list.add(two);
list.add(three);
list.add(four);
for (int i = 0; i < 4; i++) {
System.out.println(list.get(i).getName()+" 年齡:"+list.get(i).getAge());
}
}
}
題目三:格式化輸出集合(淼)
package day5;
import java.util.ArrayList;
public class PrintArrylist {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(10);
list.add(20);
list.add(30);
printArryList(list);
}
public static void printArryList(ArrayList<Integer> a){
for (int i = 0; i < a.size(); i++) {
System.out.print("{");
if(i==0) {
System.out.print(a.get(i));
}
else
System.out.print("@"+a.get(i));
if(i==a.size()-1){
System.out.print("}");
}
}
}
}
題目4.:篩選集合元素
package day5;
import java.util.ArrayList;
import java.util.Random;
public class ChoseArryList {
public static void main(String[] args) {
ArrayList<Integer> list1 = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list1.add(new Random().nextInt());
}
System.out.println(list1);
System.out.println("----------------------------");
ArrayList<Integer> list2 = new ArrayList<>();
for (int i = 0; i < 20; i++) {
if(selectArryList(list1.get(i)))
list2.add(list1.get(i));
}
System.out.println(list2);
}
public static boolean selectArryList(int num){
if(num%2==0)
return true;
else
return false;
}
}
6.字串*******
重點:
字串變數儲存的是地址值,指向的是堆中的字元陣列。
對字串變數進行修改實際上修改的是地址值,讓其指向另一個字元陣列,但是上一個字串的內容沒有改變。
1.字串的建立:
重點:3種構造方法:
package day5;
public class DemoString {
public static void main(String[] args) {
String str1 = new String();//空參構造方法
System.out.println("字串1是:"+str1);
char[] ch = new char[] {'A','B','C'};//字元陣列構造方法
String str2 = new String(ch);
System.out.println("字串2是:"+str2);
byte[] by = new byte[]{97,98,99};//底層位元組陣列構造方法
String str3 = new String(by);
System.out.println("字串3是:"+str3);
}
}
2.字串常量池
問題:為什麼st1st2為true而st2st3和st1st3為false?
1.字串常量池:
程式當中直接寫上的雙引號字元都只出現在字串常量池中(在堆中),而用其他構造方法寫的字串都出現在堆中。
**2.對於基本型別來說是進行數值的比較,而對於引用型別來說==是進行地址的比較**。
也就是說st1和st2儲存的地址值相等而和st3不等。
記憶體情況:
3.字串的內容比較方法**
詳細內容看程式碼裡面的註釋
package day5;
public class DemoEquals {
public static void main(String[] args) {
String st1 = "hello";
String st2 = "hello";
char[] ch = {'h','e','l','l','o'};
String st3 = new String(ch);
System.out.println(st1.equals(st2));
System.out.println(st2.equals(st3));
System.out.println("hello".equals(st3));//字串常量也可以直接.equals
/*注:當一個字串常量和一個字串變數比較時,推薦寫常量.equals(變數名),就比如上一行的程式碼
為什麼?
如果上寫 :變數名.equals(常量)
當變數為null時會出現空指標問題,會報錯。因為變數為空指標時不能用 變數.的操作
String st4 = null;
System.out.println("hello".equals(st4));
System.out.println(st4.equals("hello"));
*/
System.out.println("HELLO".equalsIgnoreCase(st2));//忽略大小的的比較方法。
}
}
4.字串的常用獲取方法
具體實現看程式碼
package day5;
public class DemoGetString {
public static void main(String[] args) {
String st1 = "hello";
String st2 = "world";
String st3 = st1.concat(st2);//字串的拼接:concatenate
System.out.println(st3);
char ch = st1.charAt(1);//查詢索引位置的字元
System.out.println(ch);
int i ="qeqweqweqrqwetrkwjkladm,x,.Zc/".length();//返回字串的長度
System.out.println(i);
int num = st1.indexOf("ll");//返回引數裡面的字串在原來字串中第一次出現的索引值,如果沒有出現返回-1.
System.out.println(num);
}
}
5.字串的擷取方法substring()
詳細內容看程式碼:
package day5;
public class Demosubstring {
public static void main(String[] args) {
String st1 = "helloworld";
String st2 = st1.substring(5);//從索引值到字串的末尾進行擷取
System.out.println(st2);
String st3 = st1.substring(4,7);//從4~6的索引值進行擷取範圍是【a,b).
System.out.println(st3);
}
}
6.字串的轉化convert
詳細內容看程式碼:
package day5;
public class DemoConvertString {
public static void main(String[] args) {
String st1 = "hello";
//將字串轉化為字元陣列
char[] ch = st1.toCharArray();
for (int i = 0; i < ch.length; i++) {
System.out.println(ch[i]);
}
System.out.println("=================");
//將字串轉化為底層的二進位制陣列
byte[] by = st1.getBytes();
for (int i = 0; i < by.length; i++) {
System.out.println(by[i]);
}
System.out.println("===============");
//將字串中的某個部分用新的字串替代
String st2 = "傻逼東西,你媽死了?";
String st3 = st2.replace("傻逼","*");
String st4 = st3.replace("你媽","*");
String st5 = st1.replace("o","*");
System.out.println(st5);
System.out.println(st3);
System.out.println(st4);
}
}
7.字串的分割
注意:圖片裡面的注意事項。
具體操作看程式碼:
package day5;
public class DemoSplitString {
public static void main(String[] args) {
String st1 = "aaa,bbb,ccc";
String[] arr1 = st1.split(",");
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
System.out.println("==================");
String st2 = "aaa.bbb.ccc";
String[] arr2 = st2.split("\\.");//當以“.”分割時用“\\.”;
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);
}
}
}
8.練習
1.拼接字串
注:對字串來說“+”是進行拼接。跟sout裡面的+是一個原理。
package day5;
public class solutionConcateString {
public static void main(String[] args) {
int[] arr = {1,2,3};
String st = getString(arr);
System.out.println(st);
}
public static String getString(int[] arr){
String st = "[";
for (int i = 0; i < arr.length; i++) {
if(i==arr.length-1)
st+="world"+arr[i]+"]";
else
st+="world"+arr[i]+"#";
}
return st;
}
}
2.統計各種型別的字元在字串中出現的次數
直接看程式碼:
我的:將字串轉化為yte陣列然後用對應的數字進行判斷
package day5;
import java.util.Scanner;
public class solutionStringKindCount {
public static void main(String[] args) {
System.out.println("請輸入字串:");
String st = new Scanner(System.in).next();
int xiaoxie = 0;
int daxie = 0;
int num = 0;
int qita = 0;
byte[] by = st.getBytes();
for (int i = 0; i < by.length; i++) {
if(by[i]<97&&by[i]>=65)
daxie++;
else if(by[i]>=97&&by[i]<129)
xiaoxie++;
else if(by[i]>=48&&by[i]<65)
num++;
else
qita++;
}
System.out.println("小寫:"+xiaoxie);
System.out.println("大寫"+daxie);
System.out.println("數字:"+num);
System.out.println("其他"+qita);
}
}
視訊上的:將字串轉化為字元陣列,與‘a’‘z’‘A’'Z’等進行比較,因為字元型別在進行運算時(包括比較大小,會自動提升稱為int型別)
7.static(學起來很繞)
視訊中的重點:
1.靜態不能訪問非靜態。
原因:因為在記憶體中先有的靜態內容,後有的非靜態內容。
理解:靜態內容是屬於類的。直接使用類名稱就能呼叫,而非靜態需要通過物件才能呼叫(非靜態屬於物件),如果一個靜態呼叫了非靜態(屬於物件的東西),系統就會不知所措(不知該使用哪一個物件的屬性)。
別人的東西:主要講了靜態成員變數
非常詳細
靜態記憶體圖:
重點:靜態變數通過類名稱訪問,全程和物件沒有關係。
靜態程式碼塊
**
8.Arrays
toString方法是將一個陣列按照預設格式轉化為字串,能夠直接sout輸出。
看程式碼:
package day6;
import java.util.ArrayList;
import java.util.Arrays;
public class DemoArrys {
public static void main(String[] args) {
String[] st = {"abc","aaa","bcd"};
Arrays.sort(st);
System.out.println(st);
System.out.println(Arrays.toString(st));
}
}
題目:(淼)將一個隨機字串中的字元升序排列,然後倒序輸出
直接上程式碼:
package day6;
import java.util.Arrays;
public class SolutionArrays {
public static void main(String[] args) {
String st = "adadgfgdfhdhdgg";
char[] ch = st.toCharArray();
Arrays.sort(ch);
for (int i = ch.length-1; i >=0; i--) {
System.out.print(ch[i]);
}
}
}
9.數學工具類Math
題目(淼)
package day6;
/*
計算在-10.8~5.9之間絕對值大於6或小於2.1的整數有多少個
*/
public class SolutionMath {
public static void main(String[] args) {
int cnt = 0;
double i = Math.ceil(-10.8);
double j = Math.floor(5.9);
for(int n = (int)i;n<=j;++n){
if(Math.abs(n)>6||Math.abs(n)<2.1)
++cnt;
}
System.out.println(cnt);
}
}
10.繼承
繼承的概述:
繼承主要解決的問題是:共性抽取。
格式:
成員變數的訪問:
區分三種重名:
新:super.成員變數 代表父類的那個成員變數。
具體例子:
成員方法的訪問規則:
覆蓋重寫
1.規則
2.繼承的理解(用處)
具體的程式碼例子:(super.show是用來繼承原來手機中show方法的內容)
父子類構造方法的訪問特點:
super關鍵字的三種用法:圖片中很詳細
繼承的三大特點:
抽象:
1.抽象方法和抽象類的格式:
二、啊哈演算法
**
1.快速排序
感覺也沒什麼好特殊說明的,直接來程式碼:
C語言:
# include<stdio.h>
int a[101];
int n;
void quicksort(int left,int right)
{
int temp,t,i,j;
if(left>right)
return;
i = left;
j = right;
temp = a[left];
while(i!=j)
{
while(a[j]>=temp && i<j)
j--;
while(a[i]<=temp && i<j)
i++;
if(i<j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
quicksort(left,i-1);
quicksort(i+1,right);
}
int main(void)
{
printf("請輸入長度:\n");
scanf("%d",&n);
int i;
for(i = 1;i<=n;++i)
{
printf("第%d個資料是:\n",i);
scanf("%d",&a[i]);
}
quicksort(1,n);
printf("====================\n");
for(i = 1;i<=n;++i)
{
printf("%d ",a[i]);
}
return 0;
}
java:
package day6;
import java.util.Scanner;
public class quicksort {
public static void main(String[] args) {
System.out.println("請輸入長度");
int n = new Scanner(System.in).nextInt();
int[] arr = new int[n];
for (int i = 0; i < arr.length; i++) {
System.out.println("第"+(i+1)+"個數是:");
arr[i] = new Scanner(System.in).nextInt();
}
qsort(arr,0,n-1);
System.out.println("=================================");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
public static void qsort(int[] a,int left,int right){
int t,temp,i,j;
if(left>right)
return;
temp = a[left];
i = left;
j = right;
while(i!=j){
while(a[j]>=temp&&i<j)
j--;
while(a[i]<=temp&&i<j)
i++;
if(i<j) {
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
qsort(a,left,i-1);
qsort(a,i+1,right);
}
}
題目:第四節:小哼買書:
p21
改題目的關鍵就是去重。
有兩種方法:
1.去重在排序。(桶排序的思想)。
2.先排序再去重(挨個遍歷,如果該元素與它之前的元素的值不相等就列印)
上程式碼:
1.
# include<stdio.h>
int main(void)
{
int a[1001] = {};
int i,n,j,cnt = 00;
scanf("%d",&n);
for(i = 0;i<n;++i)
{
scanf("%d",&j);
a[j] = j;
}
for(i = 1;i<=1000;++i)
{
if(a[i]!=0)
{
++cnt;
printf("%d\n",i);
}
}
printf("%d\n",cnt);
return 0;
}
# include<stdio.h>
int main(void)
{
int a[101];
int n;
scanf("%d",&n);
for(i = 0;i<n;++i)
{
scanf("%d",&a[i]);
}
for(i = 0;i<n-1;++i)
{
for(j = 0;j<n-1-i;++j)
{
if(a[j]>a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
printf("%d",a[0]);//先列印第一個,從第二個開始判斷
for(i = 1;i<=n;++i)
{
if(a[i]!=a[i-1])
printf("%d",a[i]);
}
return 0;
}
相關文章
- 前端週刊第 4 期前端
- 每週分享第 4 期
- 每週分享第 4 期(20181130)
- 摩拜前端週刊第4期前端
- 雲原生週報:第 3 期
- [譯] Android週報第319期Android
- Databend 開源週報第 131 期
- F#週報2019年第31期
- F#週報2019年第30期
- F#週報2019年第29期
- F#週報2019年第27期
- F#週報2019年第28期
- F#週報2019年第24期
- F#週報2019年第20期
- F#週報2019年第19期
- F#週報2019年第26期
- F#週報2019年第23期
- F#週報2019年第21期
- F#週報2019年第25期
- 第一週週報
- 第二週週報
- 週報
- SegmentFault 2023 年社群週報 Vol.4
- .NET週刊【5月第4期 2024-05-26】
- 開學第一週週報
- 學習週報 (第一週)
- 週報7
- 週報_第四十五週
- Java學習---第二週週報Java
- 每週分享第 60 期
- 每週分享第 57 期
- 每週分享第 56 期
- 每週分享第 55 期
- 每週分享第 54 期
- 每週分享第 53 期
- 每週分享第 52 期
- 每週分享第 59 期
- 每週分享第 58 期