Day01 P1-P10
/*
创建一个原始二维数组11*11
0:没有子 1:黑子 2:白子
*/
import java.util.Scanner;
public class SparseArray {
public static void main(String[] args) {
int chessArr1[][] = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
System.out.println("原始二维数组:");
for(int[] row : chessArr1){
for(int data : row){
System.out.printf("%d\t", data);
}
System.out.println();
}
//二维数组 转 稀疏数组
//先遍历二维数组,得到非零数据个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr1[i][j] != 0) {
sum++;
}
}
}
System.out.println(sum);
//创建对应稀疏数组
int sparseArr[][] = new int[sum + 1][3];
//给稀疏数组赋值
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
//遍历二维数组,将非零值放入稀疏数组中
int count = 0;//用于记录第几个非零数据
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArr1[i][j] != 0) {
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
}
}
}
//输出稀疏数组
System.out.println("稀疏数组:");
for (int i = 0; i < sparseArr.length; i++) {
System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
}
System.out.println();
//稀疏数组恢复成二维数组
int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
System.out.println();
//从稀疏数组的第二行开始
for (int i = 1; i < sparseArr.length; i++) {
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
for(int[] row : chessArr2){
for(int data : row){
System.out.printf("%d\t", data);
}
System.out.println();
}
}
}
Day07
匿名对象:
没有显时名称
匿名对象只能调用一次
匿名对象的使用:
package day07;
/**
* @author SunWenhao
* @create 2021/8/14
*/
public class InstanceTest {
public static void main(String[] args) {
Phone p = new Phone();
p.playGame();
p.sendEmail();
//匿名对象
new Phone().sendEmail();
new Phone().playGame();
new Phone().price = 1999;
new Phone().showPrice();//和上方的对象不一样
PhoneMall mall = new PhoneMall();
//mall.show(p);
mall.show(new Phone());
}
}
class Phone{
double price;
public void sendEmail(){
System.out.println("看电影");
}
public void playGame(){
System.out.println("玩游戏");
}
public void showPrice(){
System.out.println("手机价格为:" + price);
}
}
class PhoneMall{
public void show(Phone phone){
phone.sendEmail();
phone.playGame();
}
}
自定义数组工具类:
方法:
方法的重载
可变形参的方法
方法参数的值传递机制*
递归方法
重载:
定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
两同一不同:同一个类、同一个方法名、参数列表不同,参数个数不同
判断是否是重载:
跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系
总结:"两同一不同":同一个类、相同方法名
参数列表不同:参数个数不同,参数类型不同
在通过对象调用方法时,如何确定指定方法:
方法名(可能有重载)---参数列表
package day07;
/**
* @author SunWenhao
* @create 2021/8/15
*/
public class OverLoadExer {
public static void main(String[] args) {
OverLoadExer test = new OverLoadExer();
test.mOL(2);
test.mOL(2,3);
test.mOL("Hello");
System.out.println(test.max(3.14,8.56,6.98));
}
public void mOL(int i){
System.out.println(i * i);
}
public void mOL(int i,int j){
System.out.println(i * j);
}
public void mOL(String s){
System.out.println(s);
}
public int max(int i,int j){
return (i > j)? i : j;
}
public double max(double d1,double d2){
return (d1 > d2)? d1 : d2;
}
public double max(double d1,double d2,double d3){
double max = (d1 > d2)? d1 : d2;
return (max > d3)? max : d3;
}
} 可变个数形参:(JDK5.0新增)
格式:数据类型 ... 变量名
调用可变个数形参方法时,传入参数个数可以是0、1、2 ... ... 多个;
可变个数形参方法与本类中同一个类、同一个方法名、参数列表不同,参数个数不同方法之间构成重载;
可变个数形参方法必须声明在末尾
package day07;
/**
* @author SunWenhao
* @create 2021/8/15
*/
public class MethodArgsTest {
public static void main(String[] args) {
MethodArgsTest test = new MethodArgsTest();
test.show(12);
test.show("Hello");
test.show("Hello1","Hello2");
}
public void show(int i){
}
public void show(String s){
}
public void show(String ... strs){
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}
}
//不可以共存
// public void show(String[] strs){
//
// }
}
方法参数的值传递机制:
如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值
如果参数时基本数据类型,此时实参赋给形参的时实参真实存储的数据值
方法形参传递机制:值传递
形参:方法定义时小括号内的参数
实参:给形参赋的值
值传递机制?:
package day07;
/**
* @author SunWenhao
* @create 2021/8/15
*/
//public class ValueTransferTest {
// public static void main(String[] args) {
// int m = 10;
// int n = m;
// System.out.println("m:"+ m + "," + "n:" + n);
// n = 20;
// System.out.println("m:"+ m + "," + "n:" + n);
//
//
// System.out.println();
// Order o1 = new Order();
// o1.orderId = 1001;
// Order o2 = o1;
// System.out.println(o1.orderId + " " + o2.orderId);
// o2.orderId = 1002;
// System.out.println(o1.orderId + " " + o2.orderId);
//方法形参传递机制:值传递
//形参:方法定义时小括号内的参数
//实参:给形参赋的值
public class ValueTransferTest {
public static void main(String[] args) {
ValueTransferTest test = new ValueTransferTest();
int m = 10;
int n = 20;
System.out.println("m:"+ m + "," + "n:" + n);
int temp = m;
m = n;
n = temp;
System.out.println("m:"+ m + "," + "n:" + n);
test.swap(m,n);
System.out.println("m:"+ m + "," + "n:" + n);//这里的m、n仍然是main方法中的,所以不会变
}
public void swap(int m,int n){
int temp = m;
m = n;
n = temp;
System.out.println("m:"+ m + "," + "n:" + n);
}
}
递归(了解):
在一个方法体中自己调自己
方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。
递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。
package day07;
/**
* @author SunWenhao
* @create 2021/8/15
*/
//计算1-100所有自然数的和
public class Recursion {
public static void main(String[] args) {
int sum = 0;
Recursion test = new Recursion();
// for (int i = 0; i < 100; i++) {
// sum = sum + i;
// }
sum = test.getSum(20);
System.out.println(sum);
}
public int getSum(int n){
if (n == 1){
return 1;
}else {
return n + getSum(n - 1);
}
}
}
斐波那契数列:
package day07;
/**
* @author SunWenhao
* @create 2021/8/15
*/
public class Fibonacci {
public static void main(String[] args) {
Fibonacci test = new Fibonacci();
System.out.println(test.Calculate(10));
}
public int Calculate(int n){
if (n == 1){
return 1;
}else if (n == 2){
return 1;
}else{
int fibonacci;
fibonacci = Calculate(n - 1) + Calculate(n -2);
return fibonacci;
}
}
}

京公网安备 11010502036488号