《java入门如此简单》——语句,函数和数组
循环结构
-
while循环
while( 布尔表达式 ) {
//循环内容
}
-
do...while循环
对于 while 语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。
do {
//代码语句
}while(布尔表达式);
-
for循环
for循环执行的次数是在执行前就确定的
语法格式如下:
for(初始化; 布尔表达式; 更新) {
//代码语句
}
break和continue关键字:
break
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。
break 跳出最里层的循环,并且继续执行该循环下面的语句。
continue
continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
在 for 循环中,continue 语句使程序立即跳转到更新语句。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
举例:
/** * @ClassName: ForLoop * @Description: TODO * @Author: benjamin * @Date: 2019/3/22 10:32 * @Version: 1.0 */ public class ForLoop { public static void main(String[]args){ //for循环break int [] numbers = {10,20,30,40,50}; for (int x: numbers){ // //x等于30跳出 // if(x == 30){ // break; // } if(x ==30){ continue; //让程序立刻跳转到下一次循环的迭代。 } System.out.println(x); System.out.println("\n"); } } }
条件语句
if...else...
语法
if…else 的用法如下:
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
if...else 语法格式如下:
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
switch case语句
定义:在类中的具有特定功能的一段独立小程序,也叫方法;
-
将代码封装,进行功能复用
-
只有调用后才能被执行,执行完这个函数就当成垃圾回收了;
-
函数的出现提高了代码的复用性
格式:修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2, ){ 执行语句; return 返回值;}
-
特殊情况:功能没有具体的返回值,这时return 的后面直接用分号结束;返回值类型用一个关键字void进行表示;
注意:
-
如果返回值类型是void,则函数中的return语句可以省略不写;
-
函数中只能调用函数,不能在函数内部调用函数
-
定义函数时,函数的结果应该返回给调用者,交由调用者处理;
public class FunctionDemo {
// 函数的定义
public static void main(String[]args){
myPrint();
}
public static void myPrint(){
//定义一个输出helloworld的函数;
System.out.println("Hello world!");
}
}
public class FunctionDemo {
// 函数的定义
public static void main(String[]args){
int a = 3;
int b = 4;
// int c;
// c = aAddb(a,b); //应该将函数的返回值返回给调用者;
// System.out.println(c);
aAddb(a,b);//这样做不对;
}
//定义a+b的函数;
// public static int aAddb(int a,int b){
// return a+b;
// };
public static void aAddb(int a, int b){
System.out.println(a+b);
}
}
如何来编写一个函数?
需求: 定义一个功能:完成两个整数的和的获取 思路:既然定义功能,就是可以用函数来实现; 如何定义一个函数呢? 通过两个明确来完成 明确1:这个功能的结果是什么? 是和,是功能的结果,所以该功能的返回值类型是int; 其实就是在明确函数式的返回值类型。 明确2:这个功能的实现过程中是否需要未知的参数参与运算? 有,加数和被加数,这就是函数的参数列表(参数的个数,参数的类型) 其实就是明确参数列表; 注意: 返回值类型和参数类型没有直接关系;
函数的执行过程:

函数的重载:
在同一个类中,允许存在一个以上的同名函数,只要参数个数或参数类型不同即可;
-
java虚拟机自动去找对应的函数;
-
功能相同,用参数列表进行区分;
-
函数重载和返回值类型无关;
/**
* @ClassName: FunctionDemo3
* @Description: 函数overload
* @Author: benjamin
* @Date: 2019/3/22 17:22
* @Version: 1.0
*/
public class FunctionDemo3 {
public static void main(String[] args) {
System.out.println("Hello World");
System.out.println(addNums(2,3));
System.out.println(addNums(2.5,3.6));
System.out.println(addNums(2,3,3));
}
/*
* 函数的重载:
* 1. 同一个类
* 2. 同名函数;
* 3. 参数个数不同或参数类型不同
* */
//两个数相加,整数
public static int addNums(int a,int b){
return a + b;
}
// 两个数相加,double
public static double addNums(double a,double b){
return a+b;
}
// 三个数相加,整数
public static int addNums(int a,int b, int c){
return a+b+c;
}
//报错;
// public static double addNums(int a, int b){
// return a+b;
// }
//
}
函数重载的练习:
/**
* @ClassName: FunctionDemo4
* @Description: 打印99乘法表
* @Author: benjamin
* @Date: 2019/3/22 17:35
* @Version: 1.0
*/
public class FunctionDemo4 {
public static void main(String[] args) {
System.out.println("Hello World");
multiTable(5);
multiTable();
}
public static void multiTable(int num){
//打印任意的乘法表
int i,j;
for(i=1;i<=num;i++){
for(j=1;j<=i;j++){
System.out.printf("%d * %d = %d;",i,i,i*j);
}
System.out.println();
}
}
public static void multiTable(){
//打印99乘法表,函数调用的方式
multiTable(9);
}
}
数组的定义:同一种类型数据的集合。一个容器
元素从0开始编号;
格式:
元素类型[ ] 数组名 = new 元素类型[元素个数或数组长度];
int [ ] arr = new int [3];
//声明了一个int类型的数组,名称为arr,右边是new创建一个数组实体,该数组中元素是int类型,长度是3
元素类型[ ] 数组名 = new 元素类型[] {元素,元素,...}
int [ ] arr = new int [ ] {1,2,3,4};
int [ ] arr = {1,2,3,4};
/**
* @ClassName: ArrayDemo
* @Description: TODO
* @Author: benjamin
* @Date: 2019/3/23 9:33
* @Version: 1.0
*/
public class ArrayDemo {
public static void main(String[] args) {
//定义数组
//元素类型 [] 数组名 = new 元素类型 [元素个数或数组长度];
int [] array = new int[5];
for(int i = 0; i < 5;i++){
System.out.println(array[i]); //数组中元素的值默认为0;
}
}
}
/**
* @ClassName: ArrayDemo3
* @Description: TODO
* @Author: benjamin
* @Date: 2019/3/23 11:21
* @Version: 1.0
*/
public class ArrayDemo3 {
public static void main(String[] args) {
// 格式1:需要一个容器,但是不明确容器的具体数据
int [] arr0 = new int[3];
// 格式2:需要一个容器,存储已知的具体数据;
// 元素类型 [] 数组名 = new 元素类型 [] {元素1,元素2...}
int [] arr = new int[]{1,2,3,4};
int [] arr1 = {1,2,3,4};
System.out.println("Hello World");
}
}
数组的内存分配及特点
内存的划分:
- 寄存器
-
本地方法区
-
方法区
-
栈内存
存储的都是局部变量,而且变量所属的作用域一旦结束,该变量就自动释放;
注意:局部代码块,限定局部变量的生命周期;
-
堆内存
存储的是数组和对象(其实数组就是对象),凡是new建立的都在堆里;
特点:
-
每一个实体都有首地址值;
-
堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同,整数是0,小数是0.0或者0.0f,boolean false,char '\u0000'。
-
垃圾回收机制;
堆内存和栈内存的图示:

数组的实际应用
进制转换:
/**
* @ClassName: ArrayTest2
* @Description:进制转换
* @Author: benjamin
* @Date: 2019/3/25 9:48
* @Version: 1.0
*/
public class ArrayTest2 {
public static void main(String[] args) {
toBinary(60);
toHex(60);
toOctal(60);
System.out.println(Integer.toBinaryString(60));
System.out.println(" ");
}
public static void toHex(int num){
/**
* @Description: 十进制到十六进制
* @Param: [num]
* @return: void
* @Author: benjamin
* @Date: 2019/3/25
*/
trans(num,15,4);
}
public static void toBinary(int num){
/**
* @Description: 十进制-二进制
* @Param: [num]
* @return: void
* @Author: benjamin
* @Date: 2019/3/25
*/
trans(num,1,1);
}
public static void toOctal(int num){
/**
* @Description: 十进制到八进制;
* @Param: [num:要转换的数字]
* @return: void
* @Author: benjamin
* @Date: 2019/3/25
*/
trans(num,7,3);
}
public static void trans(int num,int base,int offset){
/**
* @Description: 任意进制的转换
* @Param: num:传入的数字;base:进制;offset:偏移
* @return: void
* @Author: benjamin
* @Date: 2019/3/25
*/
if(num == 0){
System.out.println("0");
return;
}
char[] chs = {
'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'
};
//查表会查到较多的数据,数据一多,就先存储起来,再进行操作;
char[] arr = new char[32];//定义一个数组容器
int pos = arr.length;//从数组的最后一个位置存;
while(num!=0){
int temp = num & base;//二进制是1,十进制是9,八进制是7;十六进制是15;
arr[--pos] = chs[temp];//从数组最后一位移位
num = num >>> offset; //num右移offset位;
}
System.out.println("pos = "+pos);//当前数组指针的位置;
for(int x= pos;x<arr.length;x++){
//循环打印输出新的数组元素;
System.out.print(arr[x]);//
}
System.out.println(" ");
}
}
查表法的实际应用:
/**
* @ClassName: ArrayTest3
* @Description:
* @Author: benjamin
* @Date: 2019/3/25 10:12
* @Version: 1.0
*/
public class ArrayTest3 {
public static void main(String[] args) {
String week = getWeek(6);
System.out.println(week);
}
public static String getWeek(int num){
/**
* @Description:
* @Param: [num:输入的星期几]
* @return: String 字符串
* @Author: benjamin
* @Date: 2019/3/25
*/
if (num > 7 || num < 1){
//如果不满足1~7,则返回提示
System.out.println("错误的输入");
}
String[] weeks = {"星期一","星期二","星期三","星期四","星期五","星期六","星期天"};
return weeks[num-1];//数组是从0开始的;
}
}
格式1: int[] [] arr = new int[3][2]; // 明确了二维数组的长度为3,一维数组的长度为2
定义了一个名为arr的二维数组;
二维数组中有3个一维数组;
每一个一维数组中有2个元素;
一维数组的名称分别为: arr[0],arr[1],arr[2]
给第一个一维数组1脚标位赋值为78的写法为:arr0 = 78;
格式2:int[] [] arr = new int[3][];//只明确了二维数组的长度为3;
二维数组中有三个一维数组;
每个一维数组都是默认初始化值null;
可以对这三个一维数组分别进行初始化;
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
/**
* @ClassName: Array2Demo
* @Description:
* @Author: benjamin
* @Date: 2019/3/25 11:04
* @Version: 1.0
*/
public class Array2Demo {
public static void main(String[] args) {
//一维数组
int[] array = new int[3];
System.out.println(array);//[I@1b6d3586
//二维数组,该数组有3个一维数组,每一个一维数组中有2个元素;
int[][] arr = new int[3][2];
System.out.println(arr);//直接打印二维数组[[I@4554617c
System.out.println(arr[0]);//直接打印二维数组中角标为0的一维数组[I@74a14482
System.out.println(arr[0][0]);//直接打印二维数组中角标为0的一维数组中的第一个元素0
int[][] arr2 = new int[3][];
arr2[0] = new int[2];
System.out.println(arr2); //[[I@1540e19d
System.out.println(arr2[0]); //[I@677327b6
System.out.println(arr2[1]); //null
System.out.println(arr2[0][0]);//0 默认值;
// System.out.println(arr2[1][0]); //报错,java.lang.NullPointerException
System.out.println(" ");
}
}
二维数组的基本操作:
/**
* @ClassName: Array2Demo2
* @Description: 打印二维数组的长度,求二维数组中元素的和;
* @Author: benjamin
* @Date: 2019/3/25 11:16
* @Version: 1.0
*/
public class Array2Demo2 {
public static void main(String[] args) {
int[][] array = new int[3][2];
System.out.println(array.length);//打印二维数组的长度,其实就是一维数组对的个数
System.out.println(array[1].length);//打印二维数组中角标为1的一维数组的长度
int sum = 0;
int [][] arr = {{1,2,3},{2,3,4},{3,4,5}};//定义一个二维数组
for(int i=0;i<arr.length;i++){
//arr.length代表二维数组的长度
for(int j=0;j<arr[i].length;j++){
// arr[i].length 表示第i个一维数组的长度;
System.out.print(arr[i][j]+",");
sum += arr[i][j];
}
}
System.out.println(" ");
System.out.println(sum);
}
}

浙公网安备 33010602011771号