——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
注:视频来源,毕向东老师的 JAVASE 基础视频。
语句
1.判断结构——if语句
三种格式:if;if else ; if elseif else。
if语句特点:
a,每一种格式都是单条语句。
b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以简化if else代码。
c,条件表达式无论写成什么样子,最终的结果不是true就是 false。
package fuxi;
/**
* 需求:根据用户指定月份,打印该月份所属季节。
*@author XiaLei
*/
public class Day2Test1 {
public static void main(String[] args) {
int month = 4;
if(month>=1 && month<4){
System.out.println("春季");
}else if(month>=4 && month<7){
System.out.println("夏季");
}else if(month>=7 && month<10){
System.out.println("秋季");
}else if(month>=10 && month<13){
System.out.println("冬季");
}else{
System.out.println("输入月份有误,程序结束。");
}
}
}
2.选择结构——switch语句
switch语句特点:
a,switch语句选择的类型只有四种:byte,short,int, char。
(注意:升级版后又添加了枚举和字符串类型)
b,case之间与default没有顺序。先执行第一个case,没有匹配的case执行default。
c,结束switch语句的两种情况:1、遇到break结束;2、执行到switch结尾结束。
d,如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。
if和switch语句很像。如果判断的具体数值不多,而且符合byte short int char这四种类型。虽然两个语句都可以使用,建议使用switch语句,因为效率稍高。其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。
package fuxi;
/**
*
*@author XiaLei
*/
public class Day2Test {
public static void main(String[] args) {
int x=3;
switch (x){
//swith在判断byte short int char 时效率较高,无法判断boolean型。
//case取值
//case 1:
//执行语句
//break;
//case 2:
//执行语句
//break;
//default:
//执行语句
//break;
case 2:
System.out.println("haha");
break;
case 12:
System.out.println("yes");
break;
default:
System.out.println("nono");
}
}
}
package fuxi;
/**
* 需求:根据用户指定月份,打印该月份所属季节。
*@author XiaLei
*/
public class Day2Test1 {
public static void main(String[] args) {
int x = 50;
switch(x){
case 1:
case 2:
case 3:
System.out.println("春季");
break;
case 4:
case 5:
case 6:
System.out.println("夏季");
break;
case 7:
case 8:
case 9:
System.out.println("秋季");
break;
case 10:
case 11:
case 12:
System.out.println("冬季");
break;
default:
System.out.println("error");
break;
}
}
}
3.循环结构——while,do while,for语句
while练习
package fuxi;
/**
* while语句格式:
* while(条件表达式){
* 满足条件则无限循环。
* }
*
* do while语句格式:
* do{
* 执行语句。
* }while(条件表达式);
*
* for(){
*
* }
*@author XiaLei
*/
public class Day3Test1 {
public static void main(String[] args) {
//求1加到100的和
int x = 0;
int sum = 0;
while(x<=100){
sum+=x;
x++;
}
System.out.println(sum);
}
}
打印结果:
5050
dowhile练习
package fuxi;
/**
*
*@author XiaLei
*/
public class Day3Test2 {
public static void main(String[] args) {
//do while 先执行循环体,再判断
int x = 0;
do{
System.out.println("x="+x++);
}
while(x<3);
}
}
打印结果:
x=0
x=1
x=2
for练习
package fuxi;
/**
*
*@author XiaLei
*/
public class day3Test {
public static void main(String[] args) {
// 打印1-10的和;
int n = 0;
for (int x=1; x<11;x++){
n+=x;
}
System.out.println(n);
// 获取1-100之间7的倍数的个数。
int m = 0;
for (int x = 1; x<101; x++){
if (x%7==0)
m++;
}
System.out.println(m);
//打印九九乘法表。
for (int x = 1; x<10;x++){
//尖朝上,改变条件;
//尖朝下,改变初始化值。
for(int y=1;y<=x;y++){
System.out.print(x+"x"+y+"="+x*y+"\t");//制表符
}
System.out.println("");
}
//打印*型金字塔。
for (int x = 1;x<6;x++){
//外循环控制行数,内循环控制列数。
for (int y = x;y<5;y++){
System.out.print(" ");
}
for (int z = 0;z<x;z++){
System.out.print("* ");
}
System.out.println("");
}
}
}
打印结果:
55
14
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
注意:1.最简单无限循环格式:while(true){}, for(;;){}。
2.while与for可以互换,区别在于for为了循环而定义的变量在for循环结束就是在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。
4.其他流程控制语句——break,continue
break(跳出)语句:应用范围:选择结构和循环结构。
continue(继续)语句:应用于循环结构。
注意:
a,这两个语句离开应用范围,存在是没有意义的。
b,这个两个语句单独存在时,下面都不可以有语句,因为执行不到。
c,continue语句是结束本次循环继续下次循环。
d,标号的出现,可以让这两个语句作用于指定的范围。只能用于循环结构。
函数
定义:定义在类中的具有特定功能的一段独立小程序。也称方法。
总结:
1. 定义函数可以将功能代码进行封装,便于对该功能进行复用。
2.函数只有被调用才会被执行。
3.函数的出现提高了代码的复用性。
4.对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
注意:
函数的重载只要参数个数或参数类型不同即可,与返回值类型无关。
数组
概念:
同一种类型数据的集合。简单的来说就是一容器,用来装东西的。
使用数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
练习1——求数组最大值,选择排序及冒泡排序。
package fuxi;
/**
* 堆栈使用 :
* 栈内存:变量的数据在方法体里面使用完毕,会自动释放 。
* 堆内存:使用java的垃圾回收机制, 非手动操作,也不能马上回收。
* 堆内存中的值都有默认初始化值。
*@author XiaLei
*/
public class day4Test1 {
public static void main(String[] args) {
// int[] arr = new int[3];
// System.out.println(arr[2]);//默认初始化值为0;
//给定数组{5,1,4,6,2,8,9},获取最值。
int[] arr = {5,1,4,6,2,8,9};
printArray(arr);
int max=5,min=5;
for (int x = 1;x<arr.length;x++){
if (min>arr[x]){
min = arr[x];
}
}
for (int x = 1;x<arr.length;x++){
if (max < arr[x]){
max = arr[x];
}
}
System.out.println("最大值="+max+" 最小值="+min);
//选择排序。
// for (int x = 0;x<arr.length-1;x++){
//
// for (int y = x+1;y<arr.length;y++){
//
// if (arr[x]>arr[y]){
//换位操作
// int temp = arr[y];
// arr[y] = arr[x];
// arr[x] = temp;
// }
// }
// }
// printArray(arr);
//冒泡排序。相对于选择排序,冒泡排序由于调用堆内存较少,效率较高。
for (int x = 0;x<arr.length-1;x++){
for (int y = 0;y<arr.length-x-1;y++){
if (arr[y]>arr[y+1]){
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
printArray(arr);
}
public static void printArray(int[] arr){//打印数组
System.out.print("[");
for (int x = 0;x<arr.length;x++){
if (x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]+"]");
}
}
}
打印结果:
[5,1,4,6,2,8,9]
最大值=9 最小值=1
[1,2,4,5,6,8,9]
练习2——数组的折半查找
package fuxi;
/**
*
*@author XiaLei
*/
public class day4Test2 {
public static void main(String[] args) {
int[] arr = {1,3,4,5,6,9};
System.out.println(halfSearch_2(arr,5));
}
public static int halfSearch_1(int[] arr,int key){
//折半查找方法1 。 必须保证该数组是有序的数组
//key为对比的数值
int max=arr.length-1,min=0,mid=(max+min)/2;
while(arr[mid]!=key){
if(arr[mid]>key)
max=mid-1;
else if(arr[mid]<key)
min=mid+1;
if(min>max)
return -1;
mid=(max+min)/2;
}
return mid;
}
public static int halfSearch_2(int[] arr,int key){
//折半查找方法2,相较于1要简单,这里注意else if的使用,如果没有else if则第一个条件没满足直接跳到else执行。
int max=arr.length-1,min=0,mid;
while(min<=max){
mid=(max+min)>>1;
if(arr[mid]>key)
max=mid-1;
else if(arr[mid]<key)
min=mid+1;
else
return mid;
}
return -1;//这里如果返回 min则可以实现知道插入元素位置的功能。
}
}
打印结果:
3
练习3——查表法定义进制通解
package fuxi;
/**
*
*@author XiaLei
*/
public class day4Test3 {
public static void main(String[] args) {
toHex(60);
trans(60,15,4);
trans(6,1,1);
trans(9,7,3);
}
public static void toHex(int x){
//自定义一个字符数组
char[] arr = {'0','1','2','3','4','5','6','7',
'8','9','a','b','c','d','e','f'};
char[] ch= new char[8];
int pos = ch.length;
while(x!=0){
int temp = x&15;
ch[--pos] = arr[temp];
x=x>>>4;
}
System.out.println("pos="+pos);
for (int y=pos;y<ch.length;y++){
System.out.print(ch[y]+",");
}
}
public static void trans(int num,int base,int offset){//进制转换通法。
char[] arr = {'0','1','2','3','4','5','6','7',
'8','9','a','b','c','d','e','f'};
//定义一个临时容器
char[] ch= new char[8];
//定义一个操作数组的指针
int pos = ch.length;
//利用与低位最大值的方式取出低位,存到临时数组中
while(num!=0){
int temp = num&base;//base为基数
ch[--pos] = arr[temp];
num=num>>>offset;//offset为右移位数
}
for (int x=pos;x<ch.length;x++){
System.out.print(ch[x]+",");
}
}
}
二维数组的概念:
int[][] arr = new int[3][2];
表示有3个一维数组,每个一维数组中有2个元素。
给第一个一维数组1角标赋值66的操作:arr[0][1] = 66;