java个人学习笔记04(function、overload、array、栈、堆)

1.函数:函数即一功能,明确该功能的结果和该功能所需的参数。return :结束函数的执行,只对于void类型函数可省略或return;

               (主函数是程序运行的入口,用来调用函数,功能应细分,分别用函数实现)

2.函数重载(overload):一个类中出现同名的函数,只要他们的参数个数或者参数类型或参数顺序不同。和返回值的类型无关

/*
需求:打印可变的九九乘法表
思路:利用函数重载
*/
class Cfb{
	public static void main(String[] args){
		print_table();
		System.out.println("-----------------------------------------------------------------------");
		print_table(5);
	}


public static void print_table(){
	print_table(9);//打印九九乘法表
}

public static void print_table(int x){
	for(int i=1;i<=x;i++){
		for(int j=1;j<=i;j++){
			System.out.print(j+"*"+i+"="+i*j+"\t");
		}
		System.out.println();//换行
	}
}
}

3.数组的定义:

元素类型[ ]  数组名 = new 元素类型[元素个数或数组长度]

int[ ] arr = new int[5];通过new关键字创建了一个元素类型为int、数组名为arr、长度为5的数组实体

元素类型[ ]  数组名 = new 元素类型[ ] {1,2,3,...} 

int [ ] arr = new int[ ] {1,2,3};OR: int [ ] arr = {1,2,3};

arr.length:通过数组的lenght属性表示数组的长度

数组在内存中存储:数组的首地址值arr存在于栈中,数组元素存储于堆中,按索引(数组下标)于堆中访问数组元素。因此数组是引用型变量

arr=null;数组arr为空,未指向堆中任何数组元素

4.内存空间的划分:栈、堆、方法区、本地方法取区、寄存器

栈内存:存储局部变量。只要是在方法中定义的变量都是局部变量。一旦变量的生命周期结束该变量就会被释放,即出栈。

堆内存:存储都是实体(对象,由关键字new创建的)。每一个实体都有一个首地址值。

               堆内存变量都有默认的初始化值,不同的类型不一样:int(0),double(0.0),boolean(false),char(‘\u0000’)

                当实体不再使用时,就会被垃圾回收机制自动处理(优于C++)

(另三种以后补充)

5.函数和数组的应用:

/*
需求:获取数组元素的最大值
思路1:记录最大的数组元素
思路2:记录最大的数组元素下标
*/
class Get_Max 
{
	public static void main(String[] args) 
	{
		int[] arr={1,23,56,8,9,34,57,100};
		int max1=get_max_1(arr);
		System.out.println("Max of arr ="+max1);
		int max2=get_max_2(arr);
		System.out.println("Max of arr ="+max2);
	}

	public static int get_max_1(int[] arr){
		int max=arr[0];//记录最大元素
		for(int i=0;i<arr.length;i++){
			if(arr[i]>max){
				max=arr[i];
			}
		}
		return max;
	}

	public static int get_max_2(int[] arr){
		int max=0;//记录最大元素的下标
		for(int i=0;i<arr.length;i++){
			if(arr[i]>arr[max]){
				max=i;
			}
		}
		return arr[max];
	}
}

/*
需求:将数组元素{1,2,3,4,5,6}转化为字符串[1,2,3,4,5,6]
思路:利用字符串与任何数据相加都是相连接
*/
class To_String 
{
	public static void main(String[] args) 
	{
		int[] arr={1,2,3,4,5,6};
		String s = toString(arr);
		System.out.println(s);
	}
	public static String toString(int[] arr){
		String s ="[";
		for(int i=0;i<arr.length;i++){
			if(i != arr.length-1){
				s = s + arr[i] + ",";
			}
			else {
				s = s + arr[i] + "]";
			}
		}
		return s;
	}
}

/*
需求:输入数字,输出对应的星期
思路:查表法(数组实现):数据之间存在对应关系,通过关系中一方查询另一方。但没有一方是有序编号时,使用map容器
*/
import java.util.*;
class  Week
{
	public static void main(String[] args) 
	{
		System.out.println("请输入一个整数:");
		Scanner input = new Scanner(System.in);//Scanner类
		int num = input.nextInt();//键盘输入一个整数
		String re = toWeek(num);
		System.out.println(re);
	}
	public static String toWeek(int num){
		if(num>7 | num<1){
			return num+"没有对应的星期";
		}
		else{
			String[] week={"","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};//table
			return week[num];
		}
	}
}

/*
需求:十进制转化为十六进制(去0版),改进上一版本的各种缺点
思路:用按位与&和无符号右移>>>依次获取十进制对应二进制的末四位,
      转化为十六进制逆序存储在字符数组中,当该十进制对应的二进制位
	  全为0时,停止转化。顺序从非0处开始输出十六进制。
*/
import java.util.*;
class To_Hex 
{
	public static void main(String[] args) 
	{
		System.out.println("请输入一个整数:");
		Scanner input = new Scanner(System.in);//Scanner类
		int num=input.nextInt();//从键盘输入一个整数
		String s = toHex(num);
		System.out.println(s);
	}
	public static String toHex(int num){
		char[] arr = new char[8];//int型十进制对应8位十六进制,默认初始化为空格
		int index = arr.length;//逆序存储,顺序输出
		while(num !=0){//num为0时停止转换,记录index的值,作为输出的开始下标,达到去0的效果
			int tmp = num&15;
			num = num>>>4;
			if(tmp > 9){
				arr[--index]=(char)(tmp-10+'A');
			}
			else{
				arr[--index]=(char)(tmp+'0');
			}
		}
		return "0x"+toString(arr,index);
	}
	public static String toString(char[] arr,int index){//将字符数组转化为字符串,从index处开始
		String s = "";
		for(int i=index;i<arr.length;i++){
			s = s + arr[i];
		}
		return s;
	}
}


/*
需求:将十进制转化为十六进制(去0版),简化上一版
思路:查表法:先建立一张十六进制的字符表,通过按位与&和无符号右移>>>依次获取十进制对应二进制
              末四位,将其转化为该表的索引,依据索引查表,获取对应十六进制字符
*/
import java.util.*;
class To_Hex$ 
{
	public static void main(String[] args) 
	{
		System.out.println("请输入一个整数:");
		Scanner input = new Scanner(System.in);
		int num = input.nextInt();
		String s = toHex(num);
		System.out.println(s);
	}
	public static String toHex(int num){
		char[] arr = new char[8];
		char[] hex = {'0','1','2','3','4','5','6','7',
			          '8','9','A','B','C','D','E','F'};
		int index = arr.length;
		while(num !=0){
			arr[--index] = hex[num & 15];
			num = num >>>4;
		}
		return "0x"+toString(arr,index);
	}
	public static String toString(char[] arr,int index){
		String s = "";
		for(int i=index;i<arr.length;i++){
			s = s + arr[i];
		}
		return s;
	}
}











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值