Java语法进阶的说明与使用

Java语法进阶的说明与使用

在理解了java基本的符号和框架后我们会发现在某些问题是无法或很难用代码解决的。那么下面就一起来看看java的语法结构与如何来运用它。

一、选择结构

1.1if选择结构

(1)为什么要用if选择结构

不管是哪个编程语言,它们都是用来解决我们生活中的问题而出现的。而生活中总是伴随着问题的判断和选择,所以if选择结构应运而生。我们将学习它用来解决这样的问题。

(2)什么是if选择结构

if选择结构是根据条件判断之后再做处理的一种语法结构。

语法:

if(条件){
	代码块		//条件成立后要执行的代码,可以是一条语句,也可以是一组语句
}

可以看到if选择结构首先是对条件进行判断,如果结果为真则执行大括号内的代码块,为假时不满足就直接执行下一代码。所以关键字if在小括号内的值必须为true或false。在if关键字后只有一行代码时其实是可以省略大括号的,但是为了避免突然在多个语句时遗忘,以及保持整体风格,还是不要省略为好。

1.1.1如何使用if选择结构
1.基本运用

示例1:

import java.util.*;
public class Text1 {
	public static void main(String[] args) {
		System.out.print("请输入整数:");//输入的提示
		Scanner input = new Scanner(System.in);
		int num = input.nextInt();//从控制台获得一个整数
		if(num == 1 ) {//判断是否等于1
				System.out.print(num);
		}
	}
}

这段代码的含义是在判断从控制台输入的一个整数是否为1。如果是1则输出num,即1;如果不是则没有输出。大家可以尝试一下,借此熟悉这个语法结构运行的方式。

2.在复杂条件下运用的逻辑运算符

如果要判断的条件不止一个,那么仅仅使用上述的语法是不行的。而java中可以用逻辑运算符来连接多个条件进行判断,列表如图所示。

​ 表1.1 常用的逻辑运算符

运算符(非短路)运算符(短路)汉语名称表达式说明
&&&与、并且条件1&&条件2两个条件都为真时,结果为真;否则有一个假时都为假。
|||或、或者条件1||条件2两个条件中有一个为真时,结果为真;两个条件都为假时,结果为假。
!!条件条件为真时,结果为假;条件为假时,结果为真。

其中,短路与非短路的区别在于,非短路的判断在条件1不管是否真假都会执行条件2的判断。

当运算符比较多的时候,无法确定运算符的执行顺序时,可以用小括号控制。即,小括号内的运算符按顺序优先运行。

1.1.2使用if-else选择结构

在生活中判断当然不会只有一次,在java中也是同样的。如果要解决多个判断的问题使用多个if选择结构是可以的,但是未免太过繁琐。现在我们来了解一种新的语法更好的解决这种问题,就是if-else选择结构。

语法:

if(条件){
    //代码块1
}else{
    //代码块2
}

这个代码的意思可以理解为“如果 xx,就xx;否则,就xx ”

示例2

import java.util.*;
public class Text1 {
	public static void main(String[] args) {
		System.out.print("请输入整数:");
		Scanner input = new Scanner(System.in);
		int num = input.nextInt();
		if((num % 3) == 0 ) {	//如果条件成立,就输出
				System.out.print("num="+ num );
			}
		}else {		//否则就输出
			System.out.println("请输入正确的数字!");
		}
	}
}

从上面的示例可以看到,else的执行条件就是满足if条件之外的所有值,然后再执行代码块。

if选择结构与if-else选择结构的明显区别就是:if-else选择结构有if块和else块;而if选择结构只有一个if块。

1.3多重if选择结构

在生活中的大多数问题都是需要多个if选择结构来解决,但是写起来也非常麻烦,java中还有一种if选择结构的形式:多重if选择结构。多重if选择结构不是多个if选择结构简单的排列,它有一种新的语法。

语法:

if(条件1){
    //代码块
}else if(条件2) {
    //代码块2
}else {
    //代码块3
}

多重if选择结构在解决判断的条件是一些连续的区间时有很大的优势。它的执行过程是:首先,判断条件1,如果成立则执行代码块1,然后跳出这个多重if选择结构,再执行后面的代码;如果条件1不满足,则判断条件2。如此一个一个判断找到一个满足条件else if块执行,或没有满足条件不执行任何一个else if块或else块,并执行多重if选择结构之后的代码。

需要注意的是else if块可以有多个或没有,完全取决于需要;else块最多有一个或没有,并且必须放在else if块之后。然后让我们来看看实际的示例。

示例3:

import java.util.*;
public class Text7 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入成绩:");
		int a = input.nextInt();
		if(a > 80) {
			System.out.print("奖励一个MP4");
		}else if(a > 60) {
            System.out.print("什么都没有");
        }
        }else if(a > 60) {
			System.out.print("惩罚编码");
		}
	}
}

你在编写出这段代码时就能发现,多重if选择结构是连续判断的,而不是跳跃的。由此可以得出else if块的顺序是不能随意排列的,必须是按一个顺序来排列。但是多重if选择结构的条件只是简单的互斥,并不存在连续的关系,则没有顺序要求。

1.4嵌套if选择结构

嵌套if选择结构就是在if选择结构里再嵌入if选择结构,它的语法如下。

语法:

if(条件1){
    if(条件2){
    	//代码块1
	}else{
    	//代码块2
	}
}else{
    //代码块2
}

这个结构的特点是在满足外层条件时,才会判断内层if的条件,并且else总是与它前面那个缺少else的if配对。在编写嵌套if选择结构的时候要按规范,把每个if或else包含的代码块用大括号括起来,相匹配的一对if和else应该左对齐,内层if结构相对于外层if要有一定的缩进。

示例4:

import java.util.*;
public class Text2 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("请输入第一个整数:");
		int num1 = input.nextInt();
		System.out.print("请输入第二个整数:");
		int num2 = input.nextInt();
		if(num1 != num2) {
			if(num1 > num2) {
			System.out.print("num1=" + num1);
			}else if(num1 < num2){
				System.out.print("num2=" + num2);
			}
		}else {
			System.out.println("请输入正确的数字!");
		}
	}
}

这个示例是在判断两个数是否相等的同时比较两个数的大小。当两个数相等的时候内层if -else选择结构并不会运行,相反则开始内层的判断并输出结果。

1.5switch选择结构

1.5.1为什么使用switch选择结构

在我们学习了上述结构后,对于选择结构应该是有所理解了。在java中编写代码时不仅仅是要解决问题,更是要选择更适合、更简易的方法实现。在java中switch选择结构在等值判断的问题上可以更方便的解决。

1.5.2什么是switch选择结构

语法:

switch(表达式){
    case 常量 1:
        //代码块1
        break;
    case 常量 2:
        //代码块2
        break;
  ......
    default
      	//代码块n
      	break;
}
java关键字
  • switch:表示“开关”,这个开关就是switch关键字后面小括号里表达式的值,JDK1.7后,switch语句小括号里可以是int、short、byte、char、枚举类型、String类型表达式。
  • case:表示“情况”,case后可以是int、short、byte、char、枚举类型、String类型,通常是一个固定的值。case块可以有多个,顺序可以改变,但是每个case后常量的值也必须各不相同。
  • default:表示“默认”,即其他情况都不满足。default后要紧跟冒号。default块和case块的先后顺序可以变动,不会影响程序执行的结果。通常,default块放在末尾,也可以省略。
  • break:表示“停止”,即跳出当前结构。

运行过程

先计算并获得switch后面小括号里的表达式或变量的值,然后将计算结果顺序与每个case后的常量比较,当二者相等时,执行这个case块中的代码;当遇到break时,就跳出switch选择结构,执行switch选择结构之后的代码。如果没有任何一个case后的常量与switch后的小括号中的值相等,则执行switch末尾部分default块中的代码。

需要注意的是,switch选择结构只能用于判断一个整型变量或表达式是否等于某个整数值的情况,或者一个字符型变量或表达式是否等于某个字符的情况,并且没一个case后面的常量值都不同。与if选择结构不同,switch选择结构有较大的局限性。

二.循环结构

在实际的解决问题时我们的代码不可能只输出一遍,但是要输出多遍时一定要一行一行的编写吗?循环可以轻松的解决这个问题,下面我们就来了解循环结构有哪些。

1.while循环结构

1.1什么是while循环结构

语法:

while(循环条件){
    //循环操作
}

while循环结构的含义是指:在满足循环条件下不断执行循环操作,否则退出循环。while循环结构的一个特点就是:先判断,再执行。

1.2如何使用while循环结构

使用while循环结构可以用来解决需要重复输出或输入的问题。

示例5

public class WhileDemo1 {
	public static void main(String[] args) {
		int i = 1;
		while(i<=100) {
			System.out.println("第"+i+"遍写:好好学习,天天向上!");
			i++;
		}
	}
}

这个例子的输出循环了100次,大家可以尝试着编写同种类型的代码加深理解。

2.do-while循环结构

语法:

do{
    //循环操作
}while(循环条件);

执行顺序

  • 声明并初始化循环变量。
  • 执行一遍循环操作。
  • 判断循环条件,如果循环条件满足,则循环继续执行,否则退出循环。
  • do-while循环的特点是先执行,再判断。并且循环至少执行一遍。而且while后面的分号是必须的,千万不要忘记。

与while循环结构相比,do-while循环结构将while关键字和循环条件放在后面,而且前面多了关键字do,后面多了一个分号。在运行时,在一开始循环条件就不满足的情况下,while循环结构一次都不会执行,do-while循环结构则不管什么情况都至少执行一次。

3.for循环结构

语法:

for(表达式1;表达式2;表达式3){
    //循环体
}

for循环结构的组成

  • 初始部分:设置循环的初始状态,如设置记录循环次数的变量i为0。

  • 循环体:重复执行的代码。

  • 迭代部分:下一次循环开始前要执行的部分,在while循环结构中它作为循环体的一部分。

  • 循环条件:判断是否循环的条件,如使用“i<100”判断次数是否已经达到100。

    ​ 三个表达式的含义

表达式形式功能举例
表达式1赋值语句循环结构的初始部分,为初始变量赋初值Int i = 0
表达式2条件语句循环结构的条件i<100
表达式3赋值语句,通常用++或–运算符循环结构的迭代部分,通常用来修改循环变量的值I++

for关键字后面括号中的三个表达式必须用";"隔开,for循环中的这三个部分及{}中的循环体是循环结构必须的四个组成部分完美的结合在了一起,非常简明。

执行顺序

  1. 执行初始部分(int i = 0;)。
  2. 进行循环条件判断(i<100;)。
  3. 根据循环条件判断结果。如果为true,则执行循环体;如果为false,则退出循环,步骤4和步骤5均不执行。
  4. 执行迭代部分,改变循环变量值(i++)。
  5. 依次重复步骤2~步骤4.直到退出for循环结构。

4.二重循环结构

现在大家已经知道了循环的三种形式,现在难度升级。我们来更进一步,了解二重循环结构。

4.1什么是二重循环

简单的来说,二重循环就是一个循环体内又包含另一个完整的循环结构。之前的三种循环结构之间可以互相嵌套。上面四种形式中,循环条件和循环操作对应的循环称为外层循环,循环条件2和循环操作2对应的循环称为内层循环,内层循环结束后才执行外层循环的语句。在二重循环中,外层循环变量变化一次,内层循环变量要从初始值到结束值变化一遍。

语法:

//while与while嵌套
while(循环条件1){
    //循环操作1
    while(循环条件2){
        //循环操作2
    }
}
//do-while与do-while循环嵌套
do{
    //循环操作1
    do{
        //循环操作2
    }while(循环条件2);
}while(循环条件1);
//for与for循环嵌套
for(循环条件1){
     //循环操作1
    for(循环条件2){
         //循环操作2
    }
}
//while与for循环嵌套
for(循环条件1){
     //循环操作1
     for(循环条件2){
         //循环操作2
    }
}

5.拓展

5.1程序调试

当程序存在错误的时候,我们需要专门的技术来发现和定位错误,这个技术就是“程序调试” ,即俗称的找bug。满足暂停程序、观察变量和逐条执行语句等功能的工具和方法总称为程序调试。

如何进行程序调试:

  • 分析错误,设置断点:在想设置断点的代码行左侧边栏双击,就会出现一个圆形的断点标记,再次双击,断点即可取消。
  • 启动调试,单步执行:设置好断点后,就可以单击“启动调试”按钮,即可开始调试
5.2break语句与continue语句的使用

break语句用于终止某个循环,使程序跳转到循环体外的下一条语句。在循环中位于break后的语句将不再执行,循环也停止执行。break语句不仅可以用在for循环结构中,也可以用在while和do-while循环结构中。break语句通常与if条件语句一起使用。

continue语句可以用于for循环结构,也可以用于while和do-while循环结构。在for循环结构中,continue语句使程序先跳转到迭代部分,然后判定循环条件。如果为true,则继续下一次循环;否则,终止循环。在while循环结构中,continue语句执行完毕后,程序将直接判断循环条件。continue语句只能用在循环结构中。

注意

永远不会退出的循环称为死循环。死循环是编程中应极力避免出现的情况,所以对于循环,编写完成后要仔细检查循环能否退出。

在二重循环中,continue为跳出当层的一次循环,进入当层的下一次循环,而break为结束当层循环体。

三.数组

1.什么是数组

数组就是一个变量,用于将相同数据类型的数据存储在内存中。前面介绍过,声明一个变量就是在内存空间分配一块合适的空间。同样,数组就是在内存空间划出一串的空间。

数组的基本要素:

  • 标识符:首先,和变量一样,在计算机中,数组也要有一个名称,称为标识符,用于区分不同的数组。
  • 数组元素:当给出了数组名称,要向数组中存放数据,这些数据就成为数组元素。
  • 数组下标:在数组中,为了正确地得到数组的元素,需要对他们进行编号,这样计算机才能根据编号去存取,这个编号就成为数组下标。
  • 元素类型:存储在数组中的数组元素应该是同一数据类型。

在数组中的注意事项还有有不少:

  • 数组只有一个名称,即标识符,如scores。
  • 数组元素在数组里顺序排列编号,该编号即为数组下标,塔标明了元素在数组中的位置。第一个元素的编号规定为0,因此数组的下标依次为0、1、2、3、4等。
  • 数组中的每个元素都可以通过下标快速来访问。由于元素是按顺序存储的,每个元素固定对应一个下标,因此可以通过下标快速访问到每个元素。
  • 数组的大小(长度)是数组可容纳元素的最大容量。定义一个数组的同时也定义了它的大小。如果数组已满但是还继续向数组中存储数据的话,程序就会出错,这称为数组越界。

2.如何使用数组

2.1声明数组

数据类型[] 数组名; 或者 数据类型 数组名[];

示例6

int[] scores;
int scores[];
2.2分配空间

数组名 = new 数据类型[数组长度];

示例7

scores = new int[10];
2.3赋值

数组名[下标值]

示例8

scores[0] = 89;
scores[1] = 60;
scores[2] = 70;

数据类型[] 数组名 = {值1,值2,值3,…,值n};

示例9

int[] scores = {60,70,98,90,76};
int[] scores = new int[]{60,70,98,90,76};
2.4注意

数组一经创建,其长度是不可改变的,如果越界访问,程序会报错。如果定义的数组是基本数据类型的数组,即int、double、char和boolean类型,在java中定义数组后,若没有指定初始值,则依数据类型的不同,会给数据元素赋一个默认值。

​ 数据元素赋的默认初始值

数据类型初始值
int0
double0.0
char‘\u0000’
booleanfalse

3.数组进阶应用

3.1数组排序

语法

Arrays.sort(数组名);

Arrays是java中提供的一个类,而sort()是该类的一个方法。按照这个语法,即将数组名放在sort()的括号中,就可以完成对该数组的排序。因此,这个方法执行后,数组中的元素已经有序了。如果以后继续需要用到工作中,则需要自己编写排序方法。

3.2求数组的最大值

语法

max = scores[0];
for(int i = 0;i<scores.length;i++){
    if(scores[i]>max){
        max = scores[i];
    }
}

这是一个循环的过程,max变量依次与数组中的元素 进行比较。如果max小于比较的元素,则执行置换操作。如果max较大,则不执行操作。因此,采用循环的方式来写代码会大大简化代码量,提高程序效率。

3.3如何向数组中插入元素

示例10

int index = scores.length;
System.out.prtintln("请输入新增成绩:")
Scanner in = new Scanner(System.in);
int num = in.nextInt;
for(int i = 0;i<scores.length;i++){
    if(num>scores[i]){
        inedx = i;
        break;			//以上是插入元素
    }
}
//元素后移
for(int j = scores.length-1;j>index;j--){
    scores[j] = scores[j-1];
}
scores[index] = num;

为了保持数组中的成绩有序,需要从数组的第一个元素开始与新增的成绩进行比较,直到找到要插入的位置,可以使用循环进行比较。找到插入位置后,将该位置后的元素后移一个位置,最后将新增的成绩信息插入该位置即可。

四.总结

以上就是Java语法的进阶使用方法了,灵活的运用这些方法可以解决java中不少问题,但是笔者还是在这补充一下。

1.如何判断字符串是否相等

回顾之前,比较int或者char类型变量是否相等我们是用运算符"=="来完成的,而String类型的却有所不同。

示例11

//判断String型变量str1是否等于str2,若相等,则值为true,若不相等,则值为false
String str1 = "yes";
String str2 = "no";
boolean bool = str1.equals(str2);
System.out.println(bool);

以上代码运行后将输出false。因此,“y”.equals(answer)用来判断变量answer的值是不是小写英文字母y。因此我们能得出使用while循环结构解决问题的步骤。

  • 分析循环条件和循环操作。
  • 套用语法写出代码。
  • 检查循环能否退出。

2.如何判断字符串大小

现在判断字符串大小语法只需要记住即可。

语法

String1.compareToIgnoreCase(String2);

以上就是Java语法的进阶使用方法了,灵活的运用这些方法可以解决java中不少问题,但是笔者还是在这补充一下。

1.如何判断字符串是否相等

回顾之前,比较int或者char类型变量是否相等我们是用运算符"=="来完成的,而String类型的却有所不同。

示例11

//判断String型变量str1是否等于str2,若相等,则值为true,若不相等,则值为false
String str1 = "yes";
String str2 = "no";
boolean bool = str1.equals(str2);
System.out.println(bool);

以上代码运行后将输出false。因此,“y”.equals(answer)用来判断变量answer的值是不是小写英文字母y。因此我们能得出使用while循环结构解决问题的步骤。

  • 分析循环条件和循环操作。
  • 套用语法写出代码。
  • 检查循环能否退出。

2.如何判断字符串大小

现在判断字符串大小语法只需要记住即可。

语法

String1.compareToIgnoreCase(String2);

这一方法返回值为int。如果按以上语法顺序String1>String2,返回值为1;String1=String2,返回值为0;String1>String2,返回值为-1。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值