xc的java学习日记(Day05:方法)

Day05

FunctionDemo

/*
  方法:完成特定功能的代码块。

注意:在很多语言里面有函数的定义,而在Java中函数被称为方法。

方法格式:

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
   	 方法体语句;
    	return 返回值; 
    }

详细解释:
  修饰符:目前就用 public static。后面我们再详细的讲解其他的修饰符。
   返回值类型:就是功能结果的数据类型。
   方法名:符合命名规则即可。方便我们的调用。
  参数:
    实际参数:就是实际参与运算的。
    形式参数;就是方法定义上的,用于接收实际参数的。
  参数类型:就是参数的数据类型
  参数名:就是变量名
  方法体语句:就是完成功能的代码。
   return:结束方法的。
   返回值:就是功能的结果,由return带给调用者。

要想写好一个方法,就必须明确两个东西:
 A:返回值类型
    结果的数据类型
 B:参数列表
    你要传递几个参数,以及每个参数的数据类型

需求:求两个数据之和的案例

方法的执行特点:不调用,不执行。
 
如何调用呢?(有明确返回值的调用)
   A:单独调用,一般来说没有意义,所以不推荐。
  B:输出调用,但是不够好。因为我们可能需要针对结果进行进一步的操作。
  C:赋值调用,推荐方案。

*/

class FunctionDemo {
	public static void main(String[] args) {
		int x = 10;
		int y = 20;
	
	//方式1:单独调用
	//sum(x,y);

	//方式2:输出调用
	//System.out.println(sum(x,y));
	//System.out.println(30);

	//方式3:赋值调用
	int result = sum(x,y);
	//result在这里可以进行操作
	System.out.println(result);
}

/*
	需求:求两个数据之和的案例
	
	两个明确:
		返回值类型:int
		参数列表:2个,都是int类型。
*/
public static int sum(int a,int b) {
		//如何实现呢?
		//int c = a + b;
		//return c;
		
		//c就是a+b,所以,我可以直接返回a+b
		return a + b;
}

}

FunctionDemo2

/*
  方法的注意事项:
       A:方法不调用不执行
      B:方法与方法是平级关系,不能嵌套定义
      C:方法定义的时候参数之间用逗号隔开
      D:方法调用的时候不用在传递数据类型
      E:如果方法有明确的返回值,一定要有return带回一个值
*/

class FunctionDemo2 {
	public static void main(String[] args) {
		/*
		错误的
		public static int sum(int a,int b){
			return a + b;
		}
		*/
		
	//sum(10,20);
	
	//int x = 10;
	//int y = 20;
	//错误
	//sum(int x,int y);
}

public static int sum(int a,int b){
	return a + b;
}
}

FunctionDemo3

/*
 需求:在控制台输出如下的形状
    *****
    *****
    *****
    *****

void类型返回值的方法调用:
	单独调用
	输出调用(错误)
	赋值调用(错误)

*/

class FunctionDemo3 {
	public static void main(String[] args) {
		//for循环嵌套输出图形
		for(int x=0; x<4; x++) {
			for(int y=0; y<5; y++) {
				System.out.print("*");
			}
			System.out.println();
		}
		System.out.println("--------------");
	
	//需求:我要在控制台输出一个6行7列的星形图形
	for(int x=0; x<6; x++) {
		for(int y=0; y<7; y++) {
			System.out.print("*");
		}
		System.out.println();
	}
	System.out.println("--------------");
	
	//如果需要继续改变,我们就应该考虑使用方法改进。
	//单独调用
	pringXing(3,4);
	System.out.println("--------------");
	pringXing(6,7);
	System.out.println("--------------");
	pringXing(8,9);
	
	//输出调用
	//此处不允许使用 '空' 类型
	//System.out.println(pringXing(3,4));
	
	//赋值调用
	//非法的表达式开始
	//void v = pringXing(3,4);
}

/*
	写一个什么样子的方法呢?写一个m行n列的代码
	
	两个明确:
		返回值类型:这个时候没有明确的返回值,不写东西还不行,所以,这里记住是void
		参数列表:int m,int n
*/
public static void pringXing(int m,int n) {
	for(int x=0; x<m; x++) {
		for(int y=0; y<n; y++) {
			System.out.print("*");
		}
		System.out.println();
	}
}
}

FunctionDemo4

/*
 需求:求数的和

我们的需求不断的发生改变,我们就对应的提供了多个求和的方法。
但是他们的名字是不一样的。
而我们又要求方法命名做到:见名知意。
但是,很明显,现在没有做到。

针对这种情况:方法的功能相同,参数列表不同的情况,为了见名知意,Java允许它们起一样的名字。

其实,这种情况有一个专业名词:方法重载。

方法重载:
   在同一个类中,方法名相同,参数列表不同。与返回值类型无关。

参数列表不同:
   A:参数个数不同
   B:参数类型不同

*/

class FunctionDemo4 {
	public static void main(String[] args) {
		//jvm会根据不同的参数去调用不同的功能
		System.out.println(sum(10,20));
		System.out.println(sum(10,20,30));
		System.out.println(sum(10,20,30,40));
	
	System.out.println(sum(10.5f,20f));
}

//需求1:求两个数的和
public static int sum(int a,int b) {
	System.out.println("int");
	return a + b;
}

//需求2:求三数的和
/*
public static int sum1(int a,int b,int c) {
	return a + b + c;
}
*/

public static int sum(int a,int b,int c) {
	return a + b + c;
}

//需求3:求四个数的和
/*
public static int sum2(int a,int b,int c,int d) {
	return a + b + c + d;
}
*/
public static int sum(int a,int b,int c,int d) {
	return a + b + c + d;
}

public static float sum(float a,float b) {
	System.out.println("float");
	return a + b;
}
}

FunctionTest

/*
键盘录入两个数据,返回两个数中的较大值
*/

import java.util.Scanner;

class FunctionTest {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
	
	System.out.println("请输入第一个数据:");
	int a = sc.nextInt();
	
	System.out.println("请输入第二个数据:");
	int b = sc.nextInt();
	
	int result = getMax(a,b);
	System.out.println("较大值是:"+result);
}

/*
	需求:两个数中的较大值
	两个明确:
		返回值类型:int
		参数列表:int a,int b			
*/
public static int getMax(int a,int b) {
	//if语句
	/*
	if(a > b) {
		//System.out.println(a);
		return a;
	}else {
		//System.out.println(b);
		return b;
	}
	*/
	
	//用三元改进
	//int c = ((a > b)? a: b);
	//return c;
	
	//由于c就是后面的式子
	return ((a>b)? a : b);
}
}

FunctionTest2

/*
   键盘录入两个数据,比较两个数是否相等

分析:
   比较两个数是否相等结果是一个boolean类型。

*/

import java.util.Scanner;

class FunctionTest2 {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
	
	System.out.println("请输入第一个数据:");
	int a = sc.nextInt();
	
	System.out.println("请输入第二个数据:");
	int b = sc.nextInt();
	
	boolean flag = compare(a,b);
	System.out.println(flag);
}

/*
	需求:比较两个数是否相等
	两个明确:
		返回值类型:boolean
		参数列表:int a,int b
*/
public static boolean compare(int a,int b) {
	//if语句的格式2实现
	/*
	if(a == b) {
		return true;
	}else {
		return false;
	}
	*/
	
	//三元改进
	//boolean flag = ((a==b)? true: false);
	//return flag;
	
	//继续改进
	//return ((a==b)? true: false);
	
	//最终版
	return a == b;
}
}

FunctionTest3

/*
键盘录入三个数据,返回三个数中的最大值
*/

import java.util.Scanner;

class FunctionTest3 {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		
	System.out.println("请输入第一个数据:");
	int a = sc.nextInt();
	
	System.out.println("请输入第二个数据:");
	int b = sc.nextInt();
	
	System.out.println("请输入第三个数据:");
	int c = sc.nextInt();
	
	int max = getMax(a,b,c);
	System.out.println("三个数据中的最大值是:"+max);
}

/*
	需求;返回三个数中的最大值
	
	两个明确:
		返回值类型:int
		参数列表:int a,int b,int c
*/
public static int getMax(int a,int b,int c) {
	//if嵌套
	/*
	if(a > b) {
		if(a > c) {
			return a;
		}else {
			return c;
		}
	}else {
		if(b > c) {
			return b;
		}else {
			return c;
		}
	}
	*/
	
	//用三元改
	/*
	if(a > b) {
		return (a>c? a: c);
	}else {
		return (b>c? b: c);
	}
	*/
	
	//继续改进
	//return (a>b)? (a>c? a: c): (b>c? b: c);
	//不建议,写代码一定要注意阅读性强
	int temp = ((a>b)? a: b);
	int max = ((temp>c)? temp: c);
	return max;
}
}

FunctionTest4

/*
键盘录入行数和列数,输出对应的星形
*/

import java.util.Scanner;

class FunctionTest4 {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		
	System.out.println("请输入行数:");
	int m = sc.nextInt();
	
	System.out.println("请输入列数:");
	int n = sc.nextInt();
	
	//void类型的方法调用
	pringXing(m,n);
}

/*
	输出星形
	
	两个明确:
		返回值类型:void
		参数列表:int m,int n
*/
public static void pringXing(int m,int n) {
	for(int x=0; x<m; x++) {
		for(int y=0; y<n; y++) {
			System.out.print("*");
		}
		System.out.println();
	}
}
}

FunctionTest5

/*
键盘录入一个数据n(1<=n<=9),输出对应的nn乘法表
*/

import java.util.Scanner;
class FunctionTest5 {
	public static void main(String[] args) {
		//创建对象
		Scanner sc = new Scanner(System.in);
	
	System.out.println("请输入n的值:(1~9)");
	int n = sc.nextInt();
	
	//调用
	printNN(n);
}

/*
	需求:输出对应的nn乘法表
	两个明确:
		返回值类型:void
		参数列表:int n
*/
public static void printNN(int n) {
	for(int x=1; x<=n; x++) {
		for(int y=1; y<=x; y++) {
			System.out.print(y+"*"+x+"="+y*x+"\t");
		}
		System.out.println();
	}
}
}

FunctionTest6

/*
 比较两个数据是否相等。参数类型分别为
    两个byte类型,两个short类型,两个int类型,两个long类型,
     并在main方法中进行测试
*/

class FunctionTest6 {
	public static void main(String[] args) {
		//测试
		byte b1 = 3;
		byte b2 = 4;
		System.out.println("byte:"+compare(b1,b2));
		
		//测试
		short s1 = 5;
		short s2 = 5;
		System.out.println("short:"+compare(s1,s2));
	
	//后面的两个自己测试
}

//byte类型
public static boolean compare(byte a,byte b) {
	System.out.println("byte");
	return a == b;
}

//short类型
public static boolean compare(short a,short b) {
	System.out.println("short");
	return a == b;
}

//int类型
public static boolean compare(int a,int b) {
	System.out.println("int");
	return a == b;
}

//long类型
public static boolean compare(long a,long b) {
	System.out.println("long");
	return a == b;
}
}
--------------------------------------------------------------------

1:方法(掌握)
	(1)方法:就是完成特定功能的代码块。
		注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法。
	(2)格式:
		修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) {
			方法体语句;
			return 返回值;
		}
	修饰符:目前就用 public static。后面再详细讲解其他修饰符
	返回值类型:就是功能结果的数据类型
	方法名:就是起了一个名字,方便我们调用该方法。
	参数类型:就是参数的数据类型
	参数名:就是变量
	参数分类:
		实参:实际参与运算的数据
		形参:方法上定义的,用于接收实际参数的变量
	方法体语句:就是完成功能的代码块
	return:结束方法
	返回值:就是功能的结果,由return带给调用者。
(3)两个明确:
	返回值类型:结果的数据类型
	参数列表:参数的个数及对应的数据类型
(4)方法调用
	A:有明确返回值的方法
		a:单独调用,没有意义
		b:输出调用,不是很好,因为我可能需要不结果进行进一步的操作。但是讲课一般我就用了。
		c:赋值调用,推荐方案
	B:void类型修饰的方法
		a:单独调用
(5)案例:
	A:求和方案
	B:获取两个数中的较大值
	C:比较两个数据是否相同
	D:获取三个数中的最大值
	E:输出m行n列的星形
	F:输出nn乘法表
(6)方法的注意事项
	A:方法不调用不执行
	B:方法之间是平级关系,不能嵌套定义
	C:方法定义的时候,参数是用,隔开的
	D:方法在调用的时候,不用在传递数据类型
	E:如果方法有明确的返回值类型,就必须有return语句返回。
(7)方法重载
	在同一个类中,方法名相同,参数列表不同。与返回值无关。
	
	参数列表不同:
		参数的个数不同。
		参数的对应的数据类型不同。
(8)方法重载案例
	不同的类型的多个同名方法的比较。
	
2:数组(掌握)
	(1)数组:存储同一种数据类型的多个元素的容器。
	(2)特点:每一个元素都有编号,从0开始,最大编号是长度-1。
	         编号的专业叫法:索引
	(3)定义格式
		A:数据类型[] 数组名;
		B:数据类型 数组名[];
	
	推荐是用A方式,B方法就忘了吧。
	但是要能看懂
(4)数组的初始化
	A:动态初始化
		只给长度,系统给出默认值
		
		举例:int[] arr = new int[3];
	B:静态初始化
		给出值,系统决定长度
		
		举例:int[] arr = new int[]{1,2,3};
		简化版:int[] arr = {1,2,3};
(5)Java的内存分配
	A:栈 存储局部变量
	B:堆 存储所有new出来的
	C:方法区(面向对象部分详细讲解)
	D:本地方法区(系统相关)
	E:寄存器(CPU使用)
	
	注意:
		a:局部变量 在方法定义中或者方法声明上定义的变量。
		b:栈内存和堆内存的区别
			栈:数据使用完毕,就消失。
			堆:每一个new出来的东西都有地址
			    每一个变量都有默认值
					byte,short,int,long 0
					float,double 0.0
					char '\u0000'
					boolean false
					引用类型 null
			    数据使用完毕后,在垃圾回收器空闲的时候回收。
(6)数组内存图
	A:一个数组
	B:二个数组
	C:三个数组(两个栈变量指向同一个堆内存)
(7)数组的常见操作
	A:遍历
		方式1:
			public static void printArray(int[] arr) {
				for(int x=0; x<arr.length; x++) {
					System.out.println(arr[x]);
				}
			}
			
		方式2:
			public static void printArray(int[] arr) {
				System.out.print("[");
				for(int x=0; x<arr.length; x++) {
					if(x == arr.length-1) {
						System.out.println(arr[x]+"]");
					}else {
						System.out.println(arr[x]+", ");
					}
				}
			}
	B:最值
		最大值:
			public static int getMax(int[] arr) {
				int max = arr[0];
				
				for(int x=1; x<arr.length; x++) {
					if(arr[x] > max) {
						max = arr[x];
					}
				}
				
				return max;
			}
			
		最小值:
			public static int getMin(int[] arr) {
				int min = arr[0];
				
				for(int x=1; x<arr.length; x++) {
					if(arr[x] < min) {
						min = arr[x];
					}
				}
				
				return min;
			}
	C:逆序
		方式1:
			public static void reverse(int[] arr) {
				for(int x=0; x<arr.length/2; x++) {
					int temp = arr[x];
					arr[x] = arr[arr.length-1-x];
					arr[arr.length-1-x] = temp;
				}
			}
			
		方式2:
			public static void reverse(int[] arr) {
				for(int start=0,end=arr.length-1; start<=end; start++,end--) {
					int temp = arr[start];
					arr[start] = arr[end];
					arr[end] = temp;
				}
			}
	D:查表
			public static String getString(String[] strArray,int index) {
				return strArray[index];
			}
	E:基本查找
		方式1:
			public static int getIndex(int[] arr,int value) {
				for(int x=0; x<arr.length; x++) {
					if(arr[x] == value) {
						return x;
					}
				}
				
				return -1;
			}
			
		方式2:
			public static int getIndex(int[] arr,int value) {
				int index = -1;
			
				for(int x=0; x<arr.length; x++) {
					if(arr[x] == value) {
						index = x;
						break;
					}
				}
				
				return index;
			}

方法调用图解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值