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;imax){
max=arr[i];
}
}
return max;
}
public static int get_max_2(int[] arr){
int max=0;//记录最大元素的下标
for(int i=0;iarr[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
/*
需求:输入数字,输出对应的星期
思路:查表法(数组实现):数据之间存在对应关系,通过关系中一方查询另一方。但没有一方是有序编号时,使用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
/*
需求:将十进制转化为十六进制(去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