2 :基本语法

语法

  • if和switch的区别:

if:

1,对具体的值进行判断。

2,对区间判断。

3,对运算结果是boolean类型的表达式进行判断。

switch:

1,对具体的值进行判断。

2,值的个数通常是固定的。

对于几个固定的值判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存,效率相对高一点。

  • Break和continue的区别

break:跳出。

break作用的范围:要么是switch语句,要么是循环语句。

记住:当break语句单独存在时,下面不要定义其他语句,因为执行不到。

break跳出所在的当前循环。

如果出现了循环嵌套,break想要跳出指定的循环,可以通过标号来完成。

break li

continue:继续。

作用的范围:循环结构。

continue:结束本次循环,继续下次循环。

如果continue单独存在时,下面不要有任何语句,因为执行不到。

For循环嵌套

大圈套小圈思想

for(int x=0; x<4; x++)//外循环控制的是行数

{for(int y=0; y<5; y++)}//内循环控制的是每一行的个数 

for(int x=1; x<=5; x++){for(int y=x; y<=5; y++){System.out.print("*");}System.out.println();}多的朝上for(int x=1; x<=5; x++){for(int y=1; y<=x; y++){System.out.print("*");}System.out.println();}多的朝下

函数

定义函数的格式:

修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...) { 

   执行语句;

   return 返回值;

 }

特殊情况: 

功能没有具体的返回值,这时return的后面直接用分号结束。 

返回值类型怎么体现呢?因为没有具体值,所以不可以写具体的数据类型。

在java中只能用一个关键字来表示这种情况。关键字是:void.

总结:没有具体返回值时,返回值类型用void来表示。 

注意:如果返回值类型是void,那么函数中的return语句可以省略不写。

需求1: 定义一个功能,完成两个整数的和的获取。

 思路:既然定义功能,就是可以用函数来体现。

  如何定义一个函数呢?

  通过两个明确来完成。

  •  明确一:这个功能的结果是什么?

  是和。是功能的结果,所以该功能的返回值类型是int 。

  其实就是在明确函数的返回值类型。

  • 明确二:这个功能实现过程中是否需要未知内容参与运算? 

  有,加数和被加数。这就是函数的参数列表(参数的个数,参数的类型)

  其实就是在明确参数列表。

 注意:返回值类型和参数类型没有直接关系。

需求2: 定义一个功能,画一个矩形在控制台。

  •  明确一:这个功能的结果是什么?

  没有结果,因为直接打印到了,控制台,并未返回给调用者。

  用void表示。

  •  明确二:这个功能实现过程中是否需要未知内容参与运算?

  有,行和列不确定。两个。整数 int.

需求3: 定义一个功能,比较两个数是否相等。

  •  明确一:这个功能的结果是什么?

   有,boolean.

  •  明确二:这个功能实现过程中是否需要未知内容参与运算?

   有,两个整数。

函数的重载

1,同一个类, 

 2,同名。

 3,参数个数不同。or 参数类型不同。

 4,函数重载和返回值类型无关。

 5,java是严谨性语言,如果函数出现的调用的不确定性,会编译失败。


数组

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

局部代码块。限定局部变量的生命周期

{   int age = 3;

   System.out.println(age);

  }

int[] arr = new int[3]; 

arr[0] = 89; 

for(int x=0; x<3; x++){System.out.println(arr[x]);}

输出:89、0、0,初始化为零

int[] arr = new int[3]; System.out.println(arr[3]);//ArrayIndexOutOfBoundsException: 当访问到数组中不存在的角标时,就会发生该异常。 arr = null; System.out.println(arr[0]);//NullPointerException 当引用型变量没有任何实体指向时,还在用其操作实体。就会发生该异常。 

内存的划分:

1,寄存器。 相当于Cpu

2,本地方法区。 相当于不同的操作系统,如windows,苹果

3,方法区。存放方法和静态变量,也叫共享数据区,方法调用完毕后从栈内存回到方法区(弹栈)

4,栈内存。

 存储的都是局部变量或者代码块

 而且变量所属的作用域一旦结束,该变量就自动释放。

5,堆内存。 

 存储是数组和对象(其实数组就是对象) 凡是new建立在堆中。

 特点:

 1,每一个实体都有首地址值。

 2,堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同。整数是0,小数0.0或者0.0f,boolean false char '\u0000'

 3,垃圾回收机制。 

格式1

需要一个容器,但是不明确容器的具体数据。 

int[] arr = new int[3]; 

格式2

需要一个容器,存储已知的具体数据。 

元素类型[] 数组名 = new 元素类型[]{元素,元素,……}; 

int[] arr = new int[]{89,34,270,17};

int[] arr = {89,34,270,17};

  对数组操作最基本的动作就是存和取、遍历 

  核心思想:就是对角标的操作。

int[] arr = {89,34,270,17};System.out.println("length:"+arr.length);  for(int x=0; x<arr.length ; x++)  {   System.out.println("arr["+x+"] = "+arr[x]+";");//arr[0] = 89; 角标从小到大  }  for(int x=arr.length-1; x>=0; x--)  {   System.out.println("arr["+x+"] = "+arr[x]+";");//arr[0] = 89; 角标从大到小  }

数组的使用

获取数组中的最大值。

 思路:

 1,需要进行比较。并定义变量记录住每次比较后较大的值。if

 2,对数组中的元素进行遍历取出,和变量中记录的元素进行比较。for

  如果遍历到的元素大于变量中记录的元素,就用变量记录住该大的值。

 3,遍历结果,该变量记录就是最大值。

 定义一个功能来是实现。

 明确一,结果。

   是数组中的元素。int .

 明确二,未知内容。

   数组.

public static void main(String[] args) {		int[] arr = { -12, -13, -54, -24, -56, -34 };		int max = getMax(arr); // max这里可以随便写成其他,只是为了输出		System.out.println("最大值为:" + max);		// System.out.println("最大值为:"+getMax(arr));也可这样	}	public static int getMax(int[] arr) {		// int max=0,不要怎么写		int max = arr[0]; // 定义变量为数组里任何一个任何数都行		for (int x = 1; x < arr.length; x++) { // 如果x=0,和自己比较没什么意义			if (arr[x] > max)				max = arr[x];		}		return max;	}
	// 通过角标获取最大值	private static int getMax2(int[] arr) {		int dex = 0;		for (int i = 1; i < arr.length; i++) {			if (arr[i] > arr[dex]) {				dex = i;			}		}		System.out.println(arr[dex]);		return arr[dex];	}

选择排序

//排完序后需要遍历数组,为了好看点写了下面的方法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] + "]");		}	}
public static void selectSort(int[] arr) {		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[x];					arr[x] = arr[y];					arr[y] = temp;				}			}		}	}

这里的的转换也可以定义一个方法

public static void swap(int[] arr,int a,int b) {   int temp = arr[a];  arr[a] = arr[b];  arr[b] = temp; }//然后public static void selectSort(int[] arr) {   for(int x=0; x<arr.length-1; x++) {    for(int y=x+1; y<arr.length; y++) {     if(arr[x]>arr[y]) {         swp(arr,x,y)    }

另一种选择排序,提高性能

 冒泡排序 相邻两个元素相比,arr[0]与arr[1]相比,arr[1]与arr[2]相比........ 最值首先出现在最末尾  

   private static void bubbleSort(int[] arr) {          for (int x = 0; x < arr.length - 1; x++) {  //外圈            for (int y = 0; y < arr.length - x - 1; y++) {// -x:比较元素减少,-1:避免角标越界                  if (arr[y] > arr[y + 1]) {                      int temp = arr[y];                      arr[y] = arr[y + 1];                      arr[y + 1] = temp;                  }              }          }      }  

这只是面试的时候用到,在Java有个工具类就可以排序    Arrays.sort(arr);

查找功能

 一般查找方式 

这里的-1:如果数组里没有一个数和查找的数相匹配,就返回个-1,

而下脚标没-1,所以结果是-1,意为着没有数组里没有这个数

 折半查找 可以提高效率,但是数组必须有序  

    private static int halfSearch(int[] arr, int key) {          int min, max, mid;          min = 0;          max = arr.length - 1;          mid = (min + max) / 2;            while (arr[mid] != key) {              if (key > arr[mid]) {                  min = mid + 1;              } else if (key < arr[mid]) {                  max = mid - 1;              }              if (min > max) {                  return -1;              }              mid = (min + max) / 2;          }          return mid;      }  

折半查找的第二种方式 可以提高效率,但是数组必须有序  

    private static int halfSearch_2(int[] arr, int key) {          int min, max, mid;          min = 0;          max = arr.length - 1;          // mid = (min + max)/2;            while (min <= max) {              mid = (min + max) / 2;                if (key > arr[mid]) {                  min = mid + 1;              } else if (key < arr[mid]) {                  max = mid - 1;              } else                  return mid;          }          return -1;      }  

总结:

/**建立一个用于操作数组的工具类,其中包含着常见的对数组操作的函数如:最值,排序等 。@author 张三 ()@version V1.0 (版本)*/public class ArrayTool{
 private ArrayTool(){}//该类中的方法都是静态的,所以该类是不需要的创建对象的。为了保证不让其他成创建该类对象 ,可以将构造函数私有化。
 /** 获取整型数组的最大值。 @param arr 接收一个元素为int类型的数组。 (参数) @return 该数组的最大的元素值 */ public static int getMax(int[] arr) {  int maxIndex = 0;  for(int x=1; x<arr.length; x++)  {   if(arr[x]>arr[maxIndex])     maxIndex = x;  }  return arr[maxIndex]; } /** 对数组进行选择排序。 @param arr 接收一个元素为int类型的数组。
 */ public static void selectSort(int[] arr) {  for(int x=0; x<arr.length-1; x++)  {   for(int y=x+1; y<arr.length; y++)   {    if(arr[x]>arr[y])     swap(arr,x,y);   }  } }
 /* 用于给数组进行元素的位置置换。 @param arr 接收一个元素为int类型的数组。 @param a @param b */ private static void swap(int[] arr,int a,int b) {  int temp = arr[a];  arr[a] = arr[b];  arr[b] = temp; } /** 获取指定的元素在指定数组中的索引. @param arr 接收一个元素为int类型的数组。 @param key 要找的元素。 @return 返回该元素第一次出现的位置,如果不存在返回-1. */ public static int getIndex(int[] arr,int key) {  for(int x=0; x<arr.length; x++)  {   if(arr[x]==key)    return x;  }  return -1; } /** 将int数组转换成字符串。格式是:[e1,e2,...] @param arr 接收一个元素为int类型的数组。 @return 返回该数组的字符串表现形式。 */ public static String arrayToString(int[] arr) {  String str = "[";  for(int x=0; x<arr.length; x++)  {   if(x!=arr.length-1)    str = str + arr[x]+", ";   else    str = str + arr[x]+"]";  }  return str; }}class ArrayToolDemo{ /* 保证程序的独立运行。 */ public static void main(String[] args) {  int[] arr = {4,8,2,9,72,6};
//	ArrayTool tool = new ArrayTool();//	int max= ArrayTool.getMax(arr);//System.out.println("max="+max); int index = ArrayTool.getIndex(arr,8);   System.out.println("index="+index); }} 

二维数组

int[][] arr = new int[3][2];//创建一个二维数组,该数组中有3个一维数组,每一个一维数组中有2个元素。

  • System.out.println(arr);//直接打印二维数组。   [[I@c17164 @左边是实体的类型。 @右边是实体的哈希值。
  • System.out.println(arr[0]);//直接打印二维数组中的角标0的一维数组。 [I@1fb8ee3
  • System.out.println(arr[0][0]);//直接打印二维数组中的角标0的一维数组中角标为0的元素。 0

求数组的和

int sum = 0;  int[][] arr = {{3,1,7},{5,8,2,9},{4,1}};for(int x=0; x<arr.length; x++) {    for(int y=0; y<arr[x].length; y++)  {     sum += arr[x][y];       }  }   System.out.println("sum="+sum);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维技术迷

PHP-数组排序

分别定义一个数值数组和一个关联数组. $age=array("lili"=&gt;"23","bob"=&gt;"30","ben"=&gt;"44"); $c...

3126
来自专栏从零开始学 Web 前端

05 - JavaSE之数组

1544
来自专栏mathor

波兰表达式

1764
来自专栏积累沉淀

必须掌握的八种排序(7-8)--归并排序,基数排序

7、归并排序 (1)基本排序:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后...

2285
来自专栏武军超python专栏

2018年8月23日python中列表的高级操作:列表推导式,列表生成器,列表迭代器

列表在我们平常的编程中经常会用到,多用于临时存储一些程序需要的数据, 向列表中添加数据时,有多种方式: 1.数据少的话直接定义列表中的数据 my1 = [...

1583
来自专栏desperate633

LintCode 翻转字符串题目分析代码

说明 单词的构成:无空格字母构成一个单词 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括 如何处理两个单词间的多个空格?在反转字符...

742
来自专栏尾尾部落

[剑指offer] 链表中倒数第k个结点 [剑指offer] 链表中倒数第k个结点

经典的双指针法。定义两个指针,第一个指针从链表的头指针开始遍历向前走k-1步,第二个指针保持不动,从第k步开始,第二个指针也开始从链表的头指针开始遍历,由于两个...

1012
来自专栏尾尾部落

普林斯顿大学算法公开课笔记——插入排序

现有一组数组 arr = [5, 6, 3, 1, 8, 7, 2, 4],共有八个记录,排序过程如下:

1481
来自专栏刘望舒

算法(三)初等排序后篇[选择和希尔排序]

1.选择排序 根据上一篇文章讲到的插入排序和冒泡排序,我们把选择排序的数组也分为已排序部分和未排序部分。 图解选择排序 在用图来讲解选择排序之前,我们要先了...

1858
来自专栏大闲人柴毛毛

剑指offer——面试题10输入一个十进制整数,统计其中二进制1的个数

/** * 题目:输入一个十进制整数,统计其中二进制1的个数 * @author 大闲人柴毛毛 */ public class CountBitOne {...

3644

扫码关注云+社区

领取腾讯云代金券