一、条件运算符
(逻辑表达式)? 表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
示例:
获取两个数中大数intx=3,y=4,z;
z =(x>y)?x:y;//z变量存储的就是两个数的大数
运算符的优先级
运算符的优先级(从高到低)
优先级 | 描述 | 运算符 |
1 | 括号 | ()、[] |
2 | 正负号 | +、- |
3 | 自增自减,非 | ++、--、! |
4 | 乘除,取余 | *、/、% |
5 | 加减 | +、- |
6 | 移位运算 | <<、>>、>>> |
7 | 大小关系 | >、>=、<、<= |
8 | 相等关系 | ==、!= |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 逻辑与 | && |
13 | 逻辑或 | || |
14 | 条件运算 | ?: |
15 | 赋值运算 | =、+=、-=、*=、/=、%= |
16 | 位赋值运算 | &=、|=、<<=、>>=、>>>= |
二、判断结构(重点)
1、if
第一种:if(条件表达式){
执行语句;
}
int age = 17;
if (age >= 18)
System.out.println("可以浏览本网站");
System.out.println("完了");
第二种:if(条件表达式){//if else和三元运算符的区别
执行语句;//三元运算符是一个运算符号,ifelse是一个语句
}else{//三元运算符运算后必须有结果,而且不能有语句
//ifelse可以没有结果,可以有语句
执行语句;
}
int x = 1;
if (x == 1){
System.out.println("男厕所欢迎您");
}else {
System.out.println("女厕所欢迎您");
}
第三种:if(条件表达式){
执行语句;
}else if (条件表达式){
执行语句;
}else{
执行语句;
int x = 1;
if (x == 1){
System.out.println("男厕所欢迎您");
}else if(x == 0){
System.out.println("女厕所欢迎您");
}else {
System.out.println("无法识别您的性别");
}
if语句特点:
a,每一种格式都是单条语句。
b,第二种格式与三元运算符的区别:三元运算符运算完要有值出现。好处是:可以写在其他表达式中。
c,条件表达式无论写成什么样子,只看最终的结构是否是true 或者 false;
2:switch
格式:
int x = 10;
switch (表达式){//byte,short,int,char,String 枚举
case 表达式里对应的值:
执行语句;
//break;
case 表达式里对应的值:
执行语句;
break;
......
default:
执行语句;
break;//最后一句的break可写可不写,因为程序已经执行到了末尾
String name = "张三";
String gender = "先生";
switch (gender){
case "先生":
System.out.println(name + "是一位" + gender + "喜欢吃饭睡觉打dota");
//break;
case "女士":
System.out.println(name + "是一位" + gender + "逛街购物美容");
break;
default:
System.out.println(name + "是一位" + gender + "打雌性激素保持美貌容颜");
}
重点:switch 结束只有两种情况
1,当程序执行过程中遇到了break
2,当程序执行到了末尾处
应用 switch需要注意的两个细节
1,当switch表达式的值与其中一个case匹配的时候,这个case里没有写break;语句,那么程序会继续执行下个 case里
的执行语句,不会再对case值进行判断,应用于当几个case里的值所要执行的语句都一样的时候,我们可以不 写break
例如:我们做一年有四季的例子:
int month = 4;
switch (month){
case 3:
case 4:
case 5:
System.out.println(month+"月是春季");
break;
case 6:
case 7:
case 8:
System.out.println(month+"月是夏季");
break;
case 9:
case 10:
case 11:
System.out.println(month+"月是秋季");
break;
case 12:
case 1:
case 2:
System.out.println(month+"月是冬季");
break;
default:
System.out.println(month+"月没有这样的月份")
}//上述例子就是三个case里面的值输出都一样的,所以我们省略了break;这样会少写几行代码,提高效率
2,当我们把 default 不是写在最后,default 里面还没有写break的是时候,switch里的表达式与各个case里
的值都不匹配的时候,上面两个条件同时满足的话,程序在default里执行完了还会再去执行case里的语句
例如:
int x = 3;
switch (x){
case 4:
System.out.print("a");
break;
default:
System.out.print("b");//当程序执行到了default但是他没有break,下面的case值不再判断,程序继续执行
case 5:
System.out.print("c");
case 6:
System.out.print("d");
//break;//遇到break,程序跳出
case 7:
System.out.print("e");
}
3、while
格式:
while (条件表达式){
循环体;
int x = 3;
while (x<6){
System.out.println("x="+x);//循环体
x++;//用x自增来控制循环次数
}
(2)do while 循环
格式:
do{
循环体;
控制循环次数
}
while (条件表达式);
例如:
int x = 3;
do{
System.out.println("x="+x);//循环体
x++;//用x自增来控制循环次数
}
while (x<6);
while和do while的区别:
dowhile语句会先执行循环体,再去判断条件,也就是说无论条件是否满足他都至少要执行一次循环体,先执行
再判断
while 先判断条件,只要条件不满足就不在执行循环体了,先判断,再执行.
4、for
格式:
for(初始化表达式1;循环条件表达式2;循环后的操作表达式4){
执行语句;(循环体)3
}
例如:
for(int x=0; x< 3;x++ ){
System.out.println("x="+x);
}
(4)for 的嵌套循环,建议做题的时候就弄个双层嵌套就可以,不要弄太多层,影响效率
格式:
for(初始化表达式;循环条件表达式;循环后的操作表达式){//这是外层循环
执行语句;(循环体)
//下面是内存循环
for(初始化表达式;循环条件表达式;循环后的操作表达式){
执行语句;(循环体)
}
}
for (int x=1;x < 6;x++ ){
for(int y=1; y<6; y++){
System.out.print("*");
}
System.out.println();
5:continue和break
a,这两个语句离开应用范围,存在是没有意义的。
b,这两个语句单独存在下面都不可以有语句,因为执行不到。
c,continue语句是结束本次循环继续下次循环。
d,标号的出现,可以让这两个语句作用于指定的范围
6:标签
class Demo2
{
public static void main(String[] args)
{
loop1:
for(){
loop2:
while(){
continue loop2;
continue loop1;
continue loop3;//错误
continue loop4;//错误
}
loop3:
do{
loop3;
loop1;
loop2;//错误
loop4;//错误
}while();
}
loop4:
while(){
loop4;
loop1;//错误
}
}
}
语句的最后总结
(1)什么时候用变量? 当数据不确定的时候,就定义变量来存储数据。
(2)什么情况下,使用哪个语句?
A:当对某几个值进行判断的时候,可以使用if语句,或者switch语句。
建议使用switch。但是,使用switch要注意,它只能操作六种类型的值,byte,short,int,char,String,枚举。
如果是六种以外的值,需要使用if。
B:如果对数据区间进行判断,或者对运算结果是boolean类型的进行判断,用if语句。
C:当需要某些语句执行很多次的时候,使用循环结构。如果定义变量只为循环增量存在时,可以使用for语句。
如果对一个条件进行一次判断使用if,如果对该条件进行多次判断,使用while
D:如果要结束循环,可以控制循环条件,或者通过break语句完成。
如果要控制循环的流程,是否该继续执行,可以通过continue或者break来完成。
E:break结束当前所在循环。continue结束本次循环,进入下一次循环。
三、函数
函数:
1.函数就是定义在类中的具有特定功能的一段独立小程序
2.函数最大的作用:代码重用(一次定义,多次反复使用)
函数的定义:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型形式参数2,…)
{ 执行语句;
return 返回值;
}
1.修饰符:public static
2.返回值类型:由方法制定者来指定;可以是Java的任何数据类型;
3.函数名:自定义标识符;遵循自定义标识符的命名规则和命名规范;
首字母小写,多个单词,从第二个单词开始首字母大写
见名知意,驼峰命名
4.():小括号是必须的,函数的形参列表;
5.形参列表:形式上的参数,是一种"定义"。每一个参数由两部分组成:形参类型形参名
多个参数间用,号隔开
A:修饰符 后面会重点讲。public static
B:返回值类型 这个特定的功能完成后,需要返回一个结果。这个地方就是返回结果的类型。
C:函数名 为了方便使用这个函数,给它起个名字。这个名字要符合标识符命名规则。
D:参数类型 形式参数的数据类型
**:形式参数 自定义的接收方
**:实际参数 发出方add(3,5)
E:执行语句 那么这个语句是由多条语句组成。
F:return 这个功能执行完以后,需要有一个返回值,那么这个值有关键字return带回。
public static int getMax(int num1,int num2,int num3){
int m=(num1>num2)?(num1>num3?num1:num3):(num2>num3?num2:num3);
return m;
}
函数的特点
A:一般函数只有被调用后,才执行。
B:void 表示没有返回。在这个函数的结尾可以不写return。
**其实jvm会自动的结尾处加上return;
(1)如果定义自己的函数 两个明确
A:明确该功能的结果 其实就是该功能的返回类型。
B:明确该功能的参数 其实就是明确该功能中是否需要未知内容(形式参数)参与运算。
明确未知内容的类型和个数。
(2)函数的重载
A:函数名相同,参数列表不同。
**参数类型不同。int add(int i)void add(double d)
**参数个数不同。add(int a,int b);add(int a,int b,int c)
**参数顺序不同 print(String name, int age)//参数顺序不同的重载是可以存在的,但是没有什么实际意义
print(int age,String name)
B:特点:与返回值类型无关,只看参数列表。
C:好处:便于阅读,优化程序设计。
class domeOverLood
{
public static void main(String[] args)
{
fun('a',10);
}
public static viod fun(){
System.out.println("int");
}
public static viod fun(int a, intb){
System.out.println("int int");
}
public static viod fun(int a, intb){
System.out.println("long int");
}
public static viod fun(float a, intb){
System.out.println("fioat int");
}
public static viod fun(double a, intb){
System.out.println("double int");
}
}
Scanner类
Scanner类:接收用户输入:
使用Scanner需要三步:
1.在定义类之前
import java.util.Scanner;
2.在main方法中:
Scanner sc = new Scanner(System.in);
3.需要从控制台接收用户输入时:
int num = sc.nextInt();
import java.util.Scanner;
class ScannerTest
{
public static void main(String[] args)
{
//第二步:
Scanner sc = new Scanner(System.in);
//第三步,接收用户输入:
loop:
do{
System.out.print("请输入一个数:");//给用户的提示信息
int num1 = sc.nextInt();
// System.out.println("你输入的数是:" + num1);
System.out.print("请输入第二个数:");
int num2 = sc.nextInt();
// System.out.println("你输入的第二个数是:" + num2);
System.out.print("1:+ 2:- 3:* 4:/ :");
int op = sc.nextInt();
int result = 0;
switch(op){
case 1:
result = num1 + num2;
break;
case 2:
result = num1 - num2;
break;
case 3:
result = num1 * num2;
break;
case 4:
result = num1 / num2;
break;
default:
System.out.println("非法的选项!");
break;
}
System.out.println("运算结果:" + result);
do{
System.out.print("1:继续 2:退出:");
int op2 = sc.nextInt();
if(op2==2){
System.out.println("谢谢使用!拜拜!!");
break loop;
}else if(op2 == 1){
continue loop;
}
System.out.println("请输入1或者2的数字!");
}while(true);
}while(true);
}
}