作业代码:
package com.qfedu.day03;import java.util.Scanner;/*** @Author laoyan* @Description TODO* @Date 2022/3/3 9:26* @Version 1.0** 这几天的编程难点:* 1、如何使用变量* 2、方法如何定义 有没有参数,有几个参数,什么类型,需不需要返回值,以及返回值类型写什么比较合适*** java基础:* 变量* if-else* for while* 会定义方法* 各种常用类的方法 String Math Random Scanner* 集合(List,Set,Map)*/public class HomeWork01 {/*** 第二道题目:* 编程题:* 编写一个应用程序,当用户输入一串字符后,将大写转换为小写,* 将小写转换为大写,并统计出该字符串中大写字母多少个,小写字母多少个?* 比如用户依次输入: A b d D E d f c G .....* 依次循环获取用户输入的值,然后大写变小写,并打印用户输入了多少个大写字母,多少个小写字母。** String 中的两个重要的方法:* charAt(下标) 从字符串中的特定位置获取一个char* toCharArray() 将一个字符串变为一个字符数组。*/public static void second(){Scanner scanner = new Scanner(System.in);System.out.println("请输入多个字母,以空格隔开,以.结束:");// ZhangSanint bigCount = 0,smallCount = 0;String ziMu = "-1" ;while(!ziMu.equals(".")) { // apiziMu = scanner.next(); // "A"System.out.println(ziMu);char c = ziMu.charAt(0);// 'A'if (c >= 'A' && c <= 'Z') {c += 32;bigCount++;} else if (c >= 'a' && c <= 'z') {c -= 32;smallCount++;}System.out.print(c + "\t");}System.out.println("本地大写的字母有:"+bigCount+"个,小写有"+smallCount+"个");}public static void second2(){Scanner scanner = new Scanner(System.in);System.out.println("请输入一个字符串:");// ZhangSanint bigCount = 0,smallCount = 0;String str = scanner.nextLine(); // "A"char[] chars = str.toCharArray(); // A b C D// ['A',' ','b'.....]for (int i = 0; i < chars.length; i++) {char c = chars[i]; // 'A'if (c >= 'A' && c <= 'Z') {c += 32;bigCount++;} else if (c >= 'a' && c <= 'z') {c -= 32;smallCount++;}System.out.print(c + "\t");}System.out.println("本地大写的字母有:"+bigCount+"个,小写有"+smallCount+"个");}public static void main(String[] args) {//second();second2();}}
package com.qfedu.day03;/*** @Author laoyan* @Description TODO* @Date 2022/3/3 10:03* @Version 1.0** 打印如下:* ABCDE* BCDEF* CDEFG* DEFGH* EFGHI*/public class HomeWork02 {public static void main(String[] args) {for (int i = 0; i < 5; i++) {// 负责打印空格for (int j = 0; j < i; j++) {System.out.print(" ");}for (int j = 0; j < 5; j++) {System.out.print((char) (j+i+65));}System.out.println();}}}
一、数组
1、概念
数组就是一个容器,可以存储一串相同类型的数据。
2、定义
package com.qfedu.day03_02;import java.util.Arrays;/*** @Author laoyan* @Description TODO* @Date 2022/3/3 10:18* @Version 1.0*/public class Demo01 {public static void main(String[] args) {// int[] 这样的数组的数据类型是引用数据类型,跟String,Student都是一样的// 数据类型除了8大基本数据类外都是引用。int[] arr = null; // int类型的数组只能存放int类型的数据double[] arr2 = null;System.out.println(arr2);int[] arr3 = new int[5];String[] arr4 =new String[5];System.out.println(arr3);System.out.println(arr3.toString());System.out.println(Arrays.toString(arr3));System.out.println(Arrays.toString(arr4));// ctrl + dint[] arr5 = {1,2,3,59};// 是上面写法的复杂写法,不建议int[] arr6 = new int[]{1,2,3,59};System.out.println(Arrays.toString(arr5));}}
3、数组在jvm内存模型中的示意图
4、遍历数组
package com.qfedu.day03_02;/*** @Author laoyan* @Description TODO* @Date 2022/3/3 11:10* @Version 1.0*/public class Demo02 {public static void main(String[] args) {int[] arr = {1,3,5,9,10};System.out.println(arr[4]);// [下标] 下标从0开始的System.out.println(arr.length);// 可以获取数组的长度//System.out.println(arr[5]);/*最普通的循环方式*/for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}/*** 针对数组或者集合,for循环出了一个增强版* 可以非常方便的遍历数组,但是如果你还需要使用到了数组中的下标,该方式不适应。*/for (int suibian : arr) { // 从arr数组中依次拿出一个值,赋值给suibian这个变量System.out.println(suibian);}}}
小心数组下标越界
5、查找数组
普通查找:
package com.qfedu.day03_03;/*** @Author laoyan* @Description TODO* @Date 2022/3/3 14:25* @Version 1.0*/public class Demo01 {// 查询 10 是否在数组 arr 中,如果有返回其 下标,如果没有 -1public static int searchElement(int[] arr, int num){for (int i = 0; i < arr.length; i++) {if(arr[i] == num){return i;}}return -1;}public static void main(String[] args) {int[] arr = {10,8,5,12,19};System.out.println(searchElement(arr, 5));}}
二分查找:
package com.qfedu.day03_03;/*** @Author laoyan* @Description TODO* @Date 2022/3/3 14:34* @Version 1.0*/public class Demo02 {/*** 二分查找* 1、必须有序 不管是升序还是降序* 2、效率比较高** @param args*/public static void main(String[] args) {//int[] arr = {1,2,3,4,5,6,7};int[] arr = {1,2,3,4,5,6,7,9};System.out.println(binarySearch(arr, 10));}// {1,2,3,4,5,6,7} 10public static int binarySearch(int[] arr,int num){int middleIndex = arr.length / 2;int start= 0,end = arr.length -1;while(start <= end){if(arr[middleIndex] > num){end = middleIndex - 1;middleIndex = (start + end ) / 2 ;}if(arr[middleIndex] < num){start = middleIndex + 1;middleIndex = (start + end ) / 2 ;}if(arr[middleIndex] == num){return middleIndex;}}return -1;}}
6、Arrays工具类的用法
package com.qfedu.day03_03;import java.util.Arrays;/*** @Author laoyan* @Description TODO* @Date 2022/3/3 14:57* @Version 1.0** Arrays 工具类,专门用来处理数组的工具类* 里面提供了大量的关于数组的 方法* copyOf(int[] array, int newLength) 从原数组中拷贝指定数量的元素,到一个新的数组中,并返回这个新的数组** copyOfRange(int[] array, int from, int to) 从原数组中拷贝指定范围 [from, to) 的元素,到一个新的数组中,并返回这个新的数组** equals(int[] array1, int[] array2) 判断两个数组是否相同** fill(int[] array, int element) 使用指定的数据,填充数组** sort(int[] array) 对数组进行排序(升序)** binarySearch(int[] array, int element) 使用二分查找法,到数组中查询指定的元素出现的下标** toString(int[] array) 将数组中的元素拼接成字符串返回*/public class Demo03 {public static void main(String[] args) {int[] arr ={10,8,12,9,32};Arrays.sort(arr);System.out.println(Arrays.toString(arr));int num = Arrays.binarySearch(arr, 7);System.out.println(num!=-1 ? "查找到了":"不存在");// 从一个老的数组中拷贝一份给新数组,如果新数组长度比老数组大,用默认值填充int[] ints = Arrays.copyOf(arr, 10);System.out.println(Arrays.toString(ints));int[] arr2 ={10,8,12,9,32};int[] arr3 ={10,8,12,9,32};System.out.println(Arrays.equals(arr3,arr2));// 比较的是两个数组的内容System.out.println(arr2 == arr3); // 比较的是内存地址System.out.println(arr2.equals(arr3));// 比较的是内存地址int[] arr4 = Arrays.copyOfRange(arr3,1,arr3.length);System.out.println(Arrays.toString(arr4));// 使用默认值更改里面所有的元素Arrays.fill(arr3,100);int[] arr5 = new int[100];Arrays.fill(arr5,5);System.out.println(Arrays.toString(arr3));}}
7、可变长参数的用法
package com.qfedu.day03_03;import java.util.Arrays;/*** @Author laoyan* @Description TODO* @Date 2022/3/3 15:50* @Version 1.0*/public class Demo04 {public static void show(String name,int ... nums){System.out.println(name);System.out.println(nums);System.out.println(Arrays.toString(nums));for (int i:nums) {System.out.println(i);}System.out.println(nums.length);}/*可变长参数,只能放在参数列表的最后一位,操作起来跟数组一样。public static void show(int ... nums,String name){System.out.println(name);System.out.println(nums);System.out.println(Arrays.toString(nums));for (int i:nums) {System.out.println(i);}System.out.println(nums.length);}*/public static void main(String[] args) {System.out.printf("你的年龄是%d,你的身高是%d",18,210);show("zhangsan",1,3,5,10);}}
8、排序
八大排序算法
1)选择排序
选择排序:固定值与其他值依次比较大小,互换位置。
package com.qfedu.day03_03;import java.util.Arrays;/*** @Author laoyan* @Description TODO* @Date 2022/3/3 16:10* @Version 1.0** 选择排序: 先固定一个位置,然后依次与后面的值比较,如果大于后者小于后者,就交换位置。 // 拿到最大值或者最小值* 第一轮交换完成之后,固定下一个位置,以后与后年的值比较*/public class Demo05 {public static void main(String[] args) {int[] arr = {10,8,6,14,19};for(int m = 0;m < arr.length;m++){for(int n=m; n< arr.length;n++){if(arr[m]>arr[n]){arr[m]= arr[m] ^ arr[n];arr[n]= arr[m] ^ arr[n];arr[m]= arr[m] ^ arr[n];}}}System.out.println(Arrays.toString(arr));}}
2) 冒泡排序
冒泡排序:相邻的两个数值比较大小,互换位置
package com.qfedu.day03_03;import java.util.Arrays;/*** @Author laoyan* @Description TODO* @Date 2022/3/3 16:25* @Version 1.0*/public class Demo06 {public static void main(String[] args) {int[] arr = {10,9,7,5};int num = arr.length;for(num=arr.length;num > 1;num--){for(int m=0;m< num -1 ;m++){if(arr[m]>arr[m+1]){arr[m]= arr[m] ^ arr[m+1];arr[m+1]= arr[m] ^ arr[m+1];arr[m]= arr[m] ^ arr[m+1];}}System.out.println(Arrays.toString(arr));}}}
package com.qfedu.day03_03;
import java.util.Arrays;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/3 16:25
* @Version 1.0
*/
public class Demo06 {
public static void main(String[] args) {
int[] arr = {10,9,7,5};
int num = arr.length;
while(num > 1){
num--;
for(int m=0;m<num;m++){
if(arr[m]>arr[m+1]){
arr[m]= arr[m] ^ arr[m+1];
arr[m+1]= arr[m] ^ arr[m+1];
arr[m]= arr[m] ^ arr[m+1];
}
}
System.out.println(Arrays.toString(arr));
}
}
}
/**
* @Author 千锋大数据教学团队
* @Company 千锋好程序员大数据
* @Description 冒泡排序
*/
public class Test {
public static void main(String[] args) {
// 实例化一个数组
int[] array = { 1, 2, 3, 4, 5 };
// 冒泡排序
sort(array);
}
/**
* 使用冒泡排序进行升序排序
* @param array 需要排序的数组
*/
public static void sort(int[] array) {
// 1. 确定要进行多少趟的比较
for (int i = 0; i < array.length - 1; i++) {
// 2. 每趟比较,从第0位开始,依次比较两个相邻的元素
for (int j = 0; j < array.length - 1 - i; j++) {
// 3. 比较两个相邻的元素
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
}
9、递归
所谓递归:方法自己调用自己,在某个时刻退出。
1) 使用递归计算数的阶乘。
4!= 4 3 2 1
4! = 4 3!
1! = 1
package com.qfedu.day03_04;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/3 16:35
* @Version 1.0
*/
public class Demo01 {
/**
* 给定一个值,求这个值的阶乘
*
* 4!= 4 * (4-1)!
* num! = num * (num-1)!
* @param num
* @return
*/
public static int getJieCheng(int num){
if(num == 1){
return 1;
}
return num * getJieCheng(num-1);
}
public static void main(String[] args) {
System.out.println(getJieCheng(4));
}
}
2、求斐波那契数列中的某个数
package com.qfedu.day03_04;
/**
* @Author laoyan
* @Description TODO
* @Date 2022/3/3 16:42
* @Version 1.0
*/
public class Demo02 {
public static int getFeiBo(int index){
// 10 第9个+第8个
if(index == 1 || index == 2){
return 1;
}
return getFeiBo(index-1)+getFeiBo(index-2);
}
// 求斐波那契数列中的某个数
public static void main(String[] args) {
System.out.println(getFeiBo(10));
}
}
10、时间复杂度(了解)
