首页 > 编程语言 > 详细

Java基础语法

时间:2021-05-03 22:10:04      阅读:38      评论:0      收藏:0      [点我收藏+]

Java基础语法

关键字与保留字

关键字

定义:被Java语言赋予了特殊含义,用做专门用途的字符串(单词) 特点:关键字中所字母都为小写 具体关键字:

技术分享图片

保留字

现Java版本尚未使用,但以后版本可能会作为关键字使用。 具体哪些保留字:goto 、const 注意:自己命名标识符时要避免使用这些保留字

技术分享图片

标识符

  1. 定义:凡是自己可以起名字的地方都叫标识符。

  2. 涉及到的结构:包名、类名、接口名、变量名、方法名、常量名

  3. 规则:

    • 由26个英文字母大小写,0-9, _或$组成。
    • 不可以以数字开头
    • 不可以使用关键字和保留字,但能包含关键字和保留字。
    • Java中严格区分大小写,长度无限制。
    • 标识符不能包含空格。
  4. 规范:

    • 包名:多单词组成时所有字母都小写:xxxyyyzzz

    • 类名、接口名:多单词组成时,所有单词的首字母大写: XxxYyyZzz(小驼峰式)

    • 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写: xxxYyyZzz(大驼峰式)

    • 常量名:所有字母都大写。多单词时每个单词用下划线连接: XXX_YYY_ZZZ

      注意点: 在起名字时,为了提高阅读性,要尽量意义,“见名知意”。

变量(重点)

变量的分类

按数据类型分类

技术分享图片

按声明位置分类

技术分享图片

使用变量注意

  • 变量必须先声明,后使用

  • 变量都定义在其作用域内。在作用域内,它是有效的。换句话说,出了作用域,就失效了

  • 同一个作用域内,不可以声明两个同名的变量

基本数据类型应用

package com.atguigu.java;

public class VariableTest1 {
	public static void main(String[] args) {
		//1.整型 byte(单字节) short(双字节) int(四字节) long(八字节)
		//byte 范围 -128 ----  127
		byte b1 = 12;
		byte b2 = -128;
		//b2 = 128; 编译错误
		System.out.println(b1);
		System.out.println(b2);

		//声明long型变量必须以"l"或"L"结尾
		//通常定义整型变量时 使用int即可
		short s1 = 128;
		int i1 = 1234;
		long l1 = 1234656l;
		System.out.println(l1);
		
		//2.浮点型 float(四字节)  double(八字节)
		//浮点型:表示带有小数点的数值
		//float表示数值的范围要比long的范围还大
		
		double d1 = 123.3;
		System.out.println(d1);
		
		//定义float类型时 变量必须以"f"或"F"结尾
		float f1 = 123.2f;
		System.out.println(f1);
		//通常,定义浮点型变量时 优先使用double
		
		//3.字符型 (双字节)
		//定义char型变量时 通常使用一对‘‘,内部只能写一个字符
		char c1 = ‘a‘;
		//c1 = ‘ab‘;  编译不通过
		System.out.println(c1);
		//表示方式 1.声明一个字符 2.转义字符 3.直接使用Unicode来表示字符型常量
		char c5 = ‘\n‘;
		c5 = ‘\t‘;
		System.out.print("hello" + c5);
		System.out.println("World");
		
		//4.布尔型 boolean
		//只能取两个值之一:ture or false
		//常常在条件判断,循环结构中使用
		boolean bb1 = true;
		System.out.println(bb1);
		
		boolean isMarried = true;
		if(isMarried) {
			System.out.println("不能参加单身party");
		}else {
			System.out.println("多找找对象!");
		}	
	}
}

/*
//结果
12
-128
1234656
123.3
123.2
a
hello	World
true
不能参加单身party
*/

基本数据类型的转换

  • 自动数据类型转换:容量小的类型自动转换为容量大的数据类型

技术分享图片

  • 强制类型转换:自动类型提升的逆运算

    ? 需要使用强转符 ??)

    ? 注意点:强制类型转换,可能导致精度损失

    ? 说明:此时的容量大小指的是,表示数的范围和大小 例 容量(float) > 容量(long)

String类型的使用

String类型变量的使用
1.String属于引用数据类型,意为字符串
2.声明String类型变量时,使用一对""
3.String可以和8种基本数据类型变量做运算,且只能是连接"+"运算
4.运算结果仍然是String类型
package com.atguigu.java;

public class StringTest1 {
	public static void main(String[] args) {
		String s1 = "Hello world";
		System.out.println(s1);
		
		String s2 = "a";
		String s3 = "";
		
		int number = 1001;
		String numberStr = "学号:";
		String info = numberStr + number;
		System.out.println(info);
		
		boolean b1 = true;
		String info1 = info + b1;
		System.out.println(info1);
	}
}
/*
//结果
Hello world
学号:1001
学号:1001true
*/

练习1

package com.atguigu.java;
//关于String类型 的练习题
public class StringExer1 {
	public static void main(String[] args) {
		//练习1
		char c = ‘a‘;//97
		int num = 10;
		String str = "hello";
		System.out.println(c + num + str);//107hello
		System.out.println(c + str + num);//ahello10
		System.out.println(c + (num + str));//a10hello
		System.out.println((c + num) + str);//107hello
		System.out.println(str + num + c);//hello10a
		
		
		//练习2
		//控制台输出这种格式  : *	*
		System.out.println("*	*");
		System.out.println(‘*‘ + ‘\t‘ + ‘*‘);
		System.out.println(‘*‘ + "\t" + ‘*‘);
		System.out.println(‘*‘ + ‘\t‘ + "*");
		System.out.println(‘*‘ + (‘\t‘ + "*"));
		
		//注:+ 两端都不是String类型,为加法运算   
		//   + 两端若存在一着者 为String类型 ,为拼接运算
		//   char与char 类型的加法运算 结果为 int型(自动类型提升)
	}
}

/*
//结果
107hello
ahello10
a10hello
107hello
hello10a
*	*
93
*	*
51*
*	*
*/	

练习2

package com.atguigu.java;

public class StringExer2 {
	public static void main(String[] args) {
        String str1 = 4;                     //判断对错:no  字符串必须用双引号标识
        String str2 = 3.5f + “”;             //判断str2对错:yes  "3.5"
        System.out.println(str2);             //输出:”3.5”
        System.out .println(3+4+“Hello!”);     //输出:7Hello!
        System.out.println(“Hello!”+3+4);     //输出:Hello!34
        System.out.println(‘a’+1+“Hello!”);     //输出:98Hello!
        System.out.println(“Hello”+‘a’+1);     //输出:Helloa1
	}
}

进制(了解)

编程中涉及的进制及表示方式

  • 二进制(binary):0,1 ,满2进1.以0b或0B开头。
  • 十进制(decimal):0-9 ,满10进1。
  • 八进制(octal):0-7 ,满8进1. 以数字0开头表示。
  • 十六进制(hex):0-9及A-F,满16进1. 以0x或0X开头表示。此处的A-F不区分大小写。

进制之间的转换

二进制------>十进制

技术分享图片

十进制------>二进制
技术分享图片

二进制------>八进制
技术分享图片

二进制------>十六进制

技术分享图片

十六进制、八进制------>二进制

技术分享图片

运算符

算术运算符

技术分享图片

package com.atguigu.java;

public class AriTest1 {
	public static void main(String[] args) {
		// 除号:/ 
		int num1 = 12;
		int num2 = 5;
		int result1 = num1 / num2 ;//int运算结果为int 2
		System.out.println(result1);
		
		double result2 = (double)num1 / num2;//double与 int 运算结果为double 2.4
		System.out.println(result2);
		
		// %:取余运算
		//结果的符号与被模数的符号相同
		//开发中,经常使用%来判断能否被除尽
		System.out.println("12 % 5 = "+ (12%5));
		System.out.println("-12 % 5 = "+ (-12%5));
		System.out.println("12 % -5 = "+ (12%-5));
		System.out.println("-12 % -5 = "+ (-12%-5));
		
		//运算顺序从右往左  
		//++(前):  b = ++a;  先自增一,后运算
		//(后)++:  b = a++;  先运算,后自增一
		int a1 = 10;
		int b1 = ++a1;
		System.out.println("a1 = " + a1 + ",b1 = " + b1);
		int a2 = 10;
		int b2 = a2++;
		System.out.println("a2 = " + a2 + ",b2 = "+ b2);
		
		//注意点:
		short s1 = 10;
		//s1 = s1 + 1;//编译错误 
		//s1 = (short)(s1+1);//编译正确
		s1++;//自增一 不会改变本身变量的数据类型
		System.out.println(s1);
		
	}
}

/*
//结果
2
2.4
12 % 5 = 2
-12 % 5 = -2
12 % -5 = 2
-12 % -5 = -2
a1 = 11,b1 = 11
a2 = 11,b2 = 10
11
*/

赋值运算符

运算符之二:赋值运算符
= += -= *= /= %=
package com.atguigu.java;

public class SetVauleTest1 {
	public static void main(String[] args) {
		//连续赋值
		int i1,j1;
		i1 = j1 = 10;
		
		int i2 = 10,j2 = 10;
		
		//扩展运算符  
		int num1 = 10;
		num1 += 2;//num1 = num1 + 2;
		System.out.println(num1);//12
		
		short s1 = 12;
		s1 += 2;//不会改变变量本身的数据类型
		System.out.println(s1);//14
		
		//开发中 如果希望变量实现自增2的操作 int num = 10;
		//一:num = num + 2;
		//二:num += 2;推荐
		
		//开发中 如果希望变量实现自增1的操作 int num = 10;
		//一:num = num + 2;
		//二:num += 2;推荐中
		//三:num++;
		
	}
}

比较运算符

技术分享图片

package com.atguigu.java;

public class CompareTest {
	public static void main(String[] args) {
		int i = 10,j = 20;
		
		System.out.println(i == j);//false
		System.out.println(i = j);// 20
		
		boolean b1 = true;
		boolean b2 = false;
		System.out.println(b1 == b2);//true
		System.out.println(b1 = b2);//false	
	}
}

逻辑运算符

技术分享图片

package com.atguigu.java;

public class LogicTest {
	public static void main(String[] args) {
		//区分 & 与 &&
		//相同点1:  &与 && 运算结果相同
		//相同点2:当符号左边是true时,二者都会执行符号右边的操作
		//不同点:当符号左边是false时,&会继续执行符号右边的操作,&&不在执行符号右边的操作
		// 开发中推荐使用 && ||
		boolean b1 = false;
		int num1 = 10;
		if(b1 & (num1++ >0)) {
			System.out.println("我现在在北京");
		}else {
			System.out.println("我现在在南京");
		}//我现在在南京
		System.out.println("num1 = " + num1);//num1 = 11

		boolean b2 = false;
		int num2 = 10;
		if(b2 && (num2++ >0)) {
			System.out.println("我现在在北京");
		}else {
			System.out.println("我现在在南京");
		}//我现在在南京
		System.out.println("num2 = " + num2);//num2 = 10
		
		//区分 | 与 ||
		//相同点1: | 与 || 运算结果相同
		//相同点2:当符号左边是false时,二者都会执行符号右边的操作
		//不同点:当符号左边是true时,|会继续执行符号右边的操作,||不在执行符号右边的操作
		
		boolean b3 = true;
		int num3 = 10;
		if(b3 | (num3++ >0)) {
			System.out.println("我现在在北京");
		}else {
			System.out.println("我现在在南京");
		}//我现在在北京
		System.out.println("num3 = " + num3);//num3 = 11
		
		boolean b4 = true;
		int num4 = 10;
		if(b4 || (num4++ >0)) {
			System.out.println("我现在在北京");
		}else {
			System.out.println("我现在在南京");
		}//我现在在北京
		System.out.println("num4 = " + num4);//num4 = 10
	}
}

练习

package com.atguigu.java;

public class LogicExer1 {
	public static void main(String[] args) {
		int x = 1;
		int y=1;
		if(x++==2 & ++y==2){
				x =7;
		}
		System.out.println("x="+x+",y="+y);//x=2 y=2
		//解析 1.x++==2   先运算 (x=1) ==2 false  后自增 x = 2
		//2. &运算 前者为false 需要继续看后者
		//3.++y==2  先 自增 y = 2 后运算(y=2)==2 true
		//4.条件为false 不执行if语句 所以 x=2 y=2
		
		int x = 1,y = 1;
		if(x++==2 && ++y==2){
			x =7;
		}
		System.out.println("x="+x+",y="+y);//x=2 y=1
		//解析1.x++==2   先运算 (x=1) ==2 false  后自增 x = 2
		//2. &&运算 前者为false 不需要看后者 此时y=1
		//3.条件为false 不执行if语句 所以 x=2 y=1
		
		int x = 1,y = 1;
		if(x++==1 | ++y==1){
			x =7;
		}
		System.out.println("x="+x+",y="+y);//x=7,y=2
		//解析:1.x++==1 先运算(x=1)==1 true 后自增 x=2
		//2.|运算 前者为true 还需要执行后者
		//3.++y==1 先自增 y=2 在运算(y=2)==1 false
		//4.条件为true 执行if语句 所以 x=7,y=2
		
		int x = 1,y = 1;
		if(x++==1 || ++y==1){
			x =7;
		}
		System.out.println("x="+x+",y="+y);//x=7,y=1
		解析:1.x++==1 先运算(x=1)==1 true 后自增 x=2
		//2.||运算 前者为true 不需要执行后者 此时y=1
		//3.条件为true 执行if语句 所以 x=7,y=1
	}
}
package com.atguigu.java;

public class LogicExer2 {
	public static void main(String[] args) {
		boolean x =true;
		boolean y =false;
		short z=42;
		if((z++==42)&&(y=true)) z++;
		if((x = false) || (++z==45)) z++;
		
		System. out.println("z="+z);//z=46
		//解析
		//1. 赋值 x,y,z
		//2 if((z++==42)&&(y=true)) z++;
		//2.1 (z++==42)  先运算 (z=42)==42 true 后自增 z = 43
		//2.2 &&运算 前者为 true 还需要执行后者
	    //2.3 (y=true) 将true赋值给y 并判断y是否等于true  结果为true
		//2.4条件整体为true 执行 z++; 结果为z = 44
		//3 f((x = false) || (++z==45)) z++;
		//3.1 (x = false) 结果为false
		//3.2 ||运算 前者为false 还需要执行后者
		//3.3 (++z==45) 先自增z=45 后运算(z=45)==45 结果为true
		//3.4 条件整体为true 执行 z++; 结果为z = 46
		//4 输出结果 z=46
	}
}

位运算符

技术分享图片

面试题:最高效方式的计算2 * 8 ? 2 << 3 或 8 << 1

  • 位运算符操作的都是整型的数据
  • << :在一定范围内,每向左移1位,相当于 * 2
  • :在一定范围内,每向右移1位,相当于 / 2
class BitTest {
	public static void main(String[] args) {
		int i = 21;
		i = -21;
		System.out.println("i << 2 :" + (i << 2));
		System.out.println("i << 3 :" + (i << 3));
		System.out.println("i << 27 :" + (i << 27));

		int m = 12;
		int n = 5;
		System.out.println("m & n :" + (m & n));
		System.out.println("m | n :" + (m | n));
		System.out.println("m ^ n :" + (m ^ n));

		//练习:交换两个变量的值
		int num1 = 10;
		int num2 = 20;
		System.out.println("num1 = " + num1 + ",num2 = " + num2);

		//方式一:定义临时变量的方式
		//推荐的方式
		int temp = num1;
		num1 = num2;
		num2 = temp;

		//方式二:好处:不用定义临时变量  
		//弊端:① 相加操作可能超出存储范围 ② 有局限性:只能适用于数值类型
		//num1 = num1 + num2;
		//num2 = num1 - num2;
		//num1 = num1 - num2;

		//方式三:使用位运算符
		//有局限性:只能适用于数值类型
		//num1 = num1 ^ num2;
		//num2 = num1 ^ num2;
		//num1 = num1 ^ num2;

		System.out.println("num1 = " + num1 + ",num2 = " + num2);

	}
}

三元运算符

运算符之六:三元运算符
1.结构 : (条件表达式)?表达式1:表达式2
2.说明
2.1 条件表达式的结果为boolean类型
2.2 根据条件表达式真或假,决定执行表达式1,还是表达式2
	如果表达式为true,则执行表达式1
	如果表达式为false,则执行表达式2
2.3.表达式1 和 表达式2 要求是一致的
2.4.三元运算符是可以相互嵌套的
3.凡是可以使用三元运算符的地方,都可以改写为if-else.反之,不成立
4.如果程序即可以使用三元运算符,又可以使用if-else结构.那么优先使用三元运算符。原件:简单 高效
if(条件表达式){
	表达式1
}else{
	表达式2
}
package com.atguigu.java;

public class SanYuanTest {
	public static void main(String[] args) {
		//获取两个整数中较大值
		int m = 25,n = 12;
		
		int max = (m > n)? m:n;
		System.out.println(max);//25
		
		String maxStr = (m > n)?"m大":((m == n)?"m等于n":"m小");
		System.out.println(maxStr);// m大
		
		//获取三个数的最大值
		int n1 = 12,n2 = 30,n3 = -43;
		int max1 = (n1 > n2)?n1:n2;
		int max2 = (max1 > n3)?max1:n3;
		System.out.println(max2);//30
		//不建议这样写
		int max3 = (n1 > n2)?((n1 > n3)?n1:n3):((n2>n3)?n2:n3);
		System.out.println(max3);//30
		
	}
}

流程控制

三种基本流程结构:

  • 顺序结构

    程序从上到下逐行地执行,中间没有任何判断和跳转。

  • 选择结构

    根据条件,选择性地执行某段代码。

    有if…else和switch-case两种分支语句。

  • 循环结构

    根据循环条件,重复性的执行某段代码。

    有while、do…while、for三种循环语句。

    注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素。

选择结构

if-else结构

分支结构中的if-else结构

存在三种结构
第一种
if(条件表达式){
	执行表达式
}

第二种:二选一
if(条件表达式){
	执行表达式1
}
else{
	执行表达式2
}

第三种:多选一
if(条件表达式1){
	执行表达式1
}
else if(条件表达式2){
	执行表达式2
}else if(条件表达式3){
	执行表达式3
}
...
else{
	执行表达式n
}
package com.atguigu.java;

public class IFTest {
	public static void main(String[] args) {
		//举例1
		int heartBeats = 79;
		if(heartBeats < 60 || heartBeats > 100) {
			System.out.println("需要做进一步检查");
		}
		System.out.println("检查结束");
		
		//举例2
		int age = 23;
		if(age < 18) {
			System.out.println("多看看动画片");
		}else {
			System.out.println("多工作");
		}
	}
}

Scanner类的使用

如何从键盘获取不同属性的变量:需要使用Scanner类

具体实现步骤:
1.导包  import java.util.Scanner;
2.Scannner的实例化 
3.调用Scanner类的相关方法(next()/nextXXX()),来获取指定类型的变量

注意:
需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,
可能会导致异常,使得程序终止。
package com.atguigu.java;
/*
如何从键盘获取不同属性的变量:需要使用Scanner类

具体实现步骤:
1.导包  import java.util.Scanner;
2.Scannner的实例化 
3.调用Scanner类的相关方法(next()/nextXXX()),来获取指定类型的变量

注意:
需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,、
可能会导致异常,使得程序终止。
 */
import java.util.Scanner;
public class ScannerTest {
	public static void main(String[] args) {
		Scanner  scan = new Scanner(System.in);
		
		System.out.println("请输入你的姓名");
		String name = scan.next();//scan实例获取字符型变量
		System.out.println(name);
		
		System.out.println("请输入你的芳龄");
		int age = scan.nextInt();//scan实例获取整型变量  
		System.out.println(age);
		
		System.out.println("请输入你的体重");
		double weight = scan.nextDouble();//scan实例获取浮点型变量
		System.out.println(weight);
		
		System.out.println("你是否相中我了呢?(true/false)");
		boolean result = scan.nextBoolean();//scan实例获取布尔型变量
		System.out.println(result);
		
		//对于char型的获取,Scanner没有提供相关的方法,只能获取字符串
		System.out.println("请输入你的性别:(男/女)");
		String gender = scan.next();
		char genderChar = gender.charAt(0);
		System.out.println(genderChar);//获取索引位置为0位置上的字符
	}
}
/*
//结果
请输入你的芳龄
20
20
请输入你的体重
80
80.0
你是否相中我了呢?(true/false)
false
false
请输入你的性别:(男/女)
男
男
*/

if-else例题

例题1
岳小鹏参加Java考试,他和父亲岳不群达成承诺:
如果:
成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone xs max;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断
package com.atguigu.java;

import java.util.Scanner;//导包

public class IfExer1 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);//实例化
		
		System.out.println("请输入岳小鹏的成绩(0-100)");
		int score = scan.nextInt();//调用
		
		if(score == 100) {
			System.out.println("奖励一辆BMW");
		}else if(score > 80 && score <= 99) {
			System.out.println("奖励一台iphone xs max");
		}else if(score >= 60 && score <= 80) {
			System.out.println("奖励一个 iPad");
		}else {
			System.out.println("什么奖励也没有");
		}
		
	}
}
/*
//结果
请输入岳小鹏的成绩(0-100)
79
奖励一个 iPad
*/
说明:
1.else结构是可选的。
2.针对于条件表达式
	如果多个条件表达式之间是"互斥"关系,那个判断和执行语句声明在上面还是下面,无所谓
	如果多个条件表达式之间有交集关系,需要根据实际情况,考虑清楚应该将那个结构声明在上面
	如果多个条件表达式之间有包含关系,通常需要将范围小的声明在范围大的上面
例题2
编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,
对它们进行排序(使用 if-else if-else),并且从小到大输出。

先比较num1 和 num2,得到num1 和 num2的大小关系,再把num3 插入到他们之间

说明:
1.if-else结构是可以嵌套的
2.如果if-else结构中的执行语句只有一行时,可以省略大括号,不建议采用
package com.atguigu.java;

import java.util.Scanner;//导包
public class IfExer2 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入第一个整数");
		int num1 = scan.nextInt();
		System.out.println("请输入第二个整数");
		int num2 = scan.nextInt();
		System.out.println("请输入第三个整数");
		int num3 = scan.nextInt();
		
		if(num1 >= num2) {
			if(num3 >= num1) {
				System.out.println(num2 + "," + num1 + "," + num3);
			}else if (num3 >= num2) {
				System.out.println(num2 + "," + num3 + "," + num1);
			}else {
				System.out.println(num3 + "," + num2 + "," + num1);
			}
		}else {
			if(num3 >= num2) {
				System.out.println(num1 + "," + num2 + "," + num3);
			}else if (num3 >= num1) {
				System.out.println(num1 + "," + num3 + "," + num2);
			}else{
				System.out.println(num3 + "," + num1 + "," + num2);
			}
		}			
	}
}
/*
//结果
请输入第一个整数
30
请输入第二个整数
-50
请输入第三个整数
98
-50,30,98
*/
例题3
我家的狗5岁了,5岁的狗相当于人类多大呢?其实,狗的前两年每
一年相当于人类的10.5岁,之后每增加一年就增加四岁。那么5岁的狗
相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁。
编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人
类的年龄。如果用户输入负数,请显示一个提示信息。
package com.atguigu.java;

import java.util.Scanner;//导包
public class IfExer3 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);//实例化
		
		System.out.println("请输入狗的年龄");
		int dogAge = scan.nextInt();//调用
		double dogtopersonAge;
		
		if(dogAge <= 0) {
			System.out.println("输入不合法");
		}else { 
			if(dogAge <= 2) {
				dogtopersonAge =  dogAge*10.5;
			}else{
				dogtopersonAge = 2*10.5 + (dogAge-2)*4;
			}
			System.out.println("相当于人的年龄:" + dogtopersonAge);
		}
		
	}
}
/*
//结果
请输入狗的年龄
5
相当于人的年龄:33.0
*/
如何生成随机数
package com.atguigu.java;
/*
随机数的产生:10-99
 */
public class IfExer4 {
	public static void main(String[] args) {
		double value1 = Math.random()*100;// [0.0 1.0)-->[0.0 100.0)
		double value2 = (int)(Math.random()*90 + 10);// 10-99
		System.out.println(value2);
		// 公式 [a,b] : (int)(Math.random()*(b-a+1) + a)
	}
}
例题4
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出
一定的条件:高:180cm以上;富:财富1千万以上;帅:是。
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
如果三个条件都不满足,则:“不嫁!”
package com.atguigu.java;

import java.util.Scanner;//导包
public class IfExer5 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);//实例化
		
		System.out.println("请输入你的身高(cm):");
		int height = scan.nextInt();//
		System.out.println("请输入你的财富(千万):");
		double wealth = scan.nextDouble();
		System.out.println("请输入你是否帅(true/false):");
		boolean isHandsome = scan.nextBoolean();
		
		if(height >= 180 && wealth >= 1 && isHandsome) {
			System.out.println("我一定要嫁给他!!!");
		}else if(height >= 180 || wealth >= 1 || isHandsome) {
			System.out.println("嫁吧,比上不足,比下有余。");
		}else {
			System.out.println("不嫁!");
		}
		
	}
}
/*
//结果
请输入你的身高(cm):
172
请输入你的财富(千万):
0.3
请输入你是否帅(true/false):
true
嫁吧,比上不足,比下有余。
*/

Switch-case结构

分支结构之二:switch-case

1.格式
switch(表达式){
case 常量1:
	执行语句1;
	//break;
case 常量2:
	执行语句2;
	//break;
	...
default:
	执行语句n;
	//break;
}

说明:
1.根据switch表达式中的值,依次匹配各个case中的常量,一旦匹配成功,则进入相应case中的语句去执行
当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break或switch-case结构结束
2.break关键字,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构
3.switch结构中的表达式,只能是如下的6种数据类型:
	byte,short,char,int,枚举类型,String类型
4.case之后声明常量,不能声明范围
5.break关键字是可选的
6.default 相当于if-else结构中的else
		default结构是可选的
package com.atguigu.java;

public class SwitchCaseTest {
	public static void main(String[] args) {
		int number = 2;
		switch(number) {
		
		case 0:
			System.out.println("zero");
			break;
		case 1:
			System.out.println("one");
			break;
		case 2:
			System.out.println("two");
			break;
		case 3:
			System.out.println("three");
			break;
		default:
			System.out.println("other");
		}
	}
}


Switch-case例题

例题1
package com.atguigu.java;
/*
对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
 */
import java.util.Scanner;//导包
public class SwitchCaseExer1 {
	public static void main(String[] args) {
	Scanner scan = new Scanner(System.in);
	
	System.out.println("请输入学生的成绩(0-100):");
	int score = scan.nextInt();
	switch(score/60) {
	case 0:
		System.out.println("不合格");
		break;
	case 1:
		System.out.println("合格");
		break;
	default:
		System.out.println("输入有误");	
	}	
	}
}
/*
//结果
请输入学生的成绩(0-100):
80
合格
*/
例题2
根据用于指定月份,打印该月份所属的季节。
3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季
package com.atguigu.java;

import java.util.Scanner;//导包
public class SwitchCaseExer2 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);//实例化
		
		System.out.println("请输入月份(1-12):");
		int month = scan.nextInt();//调用
		
		switch(month) {
		case 12:
		case 1:
		case 2:
			System.out.println("冬季");
			break;
		case 3:
		case 4:
		case 5:
			System.out.println("春季");
			break;
		case 6:
		case 7:
		case 8:
			System.out.println("夏季");
			break;
		case 9:
		case 10:
		case 11:
			System.out.println("秋季");
			break;
		default:
			System.out.println("输入有误");
		}
	}
}
/*
//结果
请输入月份(1-12):
10
秋季
*/
例题3
编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序
输出输入的日期为2019年的第几天。

算法分析:
利用 switch-case中break结构是可选的,并且在无break结构中,程序会从某个case接口进入,然后执行后续所有的case

举例 :计算5月20 需要1-4月的天数 + 20
计算 7月18 需要 1-6月的天数 + 18 
....
可以看出来 1.2.3月需要执行的频率比较高 所以往下边放
package com.atguigu.java;

import java.util.Scanner;//导包
public class SwitchCaseExer3 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);//实例化
		
		System.out.println("请输入2019年的月份(1-12):");
		int month = scan.nextInt();//调用
		System.out.println("请输入2019年的天数(1-31):");
		int days = scan.nextInt();//调用
		
		//定义变量来保存总天数
		int sumDays = 0;
		switch(month) {
		case 12:
			sumDays += 30;
		case 11:
			sumDays += 31;
		case 10:
			sumDays += 30;
		case 9:
			sumDays += 31;
		case 8:
			sumDays += 31;
		case 7:
			sumDays += 30;
		case 6:
			sumDays += 31;
		case 5:
			sumDays += 30;
		case 4:
			sumDays += 31;
		case 3:
			sumDays += 28;
		case 2:
			sumDays += 31;
		case 1:
			sumDays += days;
		}
		System.out.println("2019年的" + month + "月" + days + "日" + "2019年的第"+ sumDays+"天");
	}
}
/*
//结果
请输入2019年的月份(1-12):
4
请输入2019年的天数(1-31):
3
2019年的4月3日2019年的第93天
*/
例题4
package com.atguigu.java;
/*
从键盘分别输入年、月、日,判断这一天是当年的第几天
 */
import java.util.Scanner;

public class SwitchCaseExer4 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);//实例化
		
		System.out.println("请输入年份:");
		int year = scan.nextInt();//调用
		System.out.println("请输入月份(1-12):");
		int month = scan.nextInt();//调用
		System.out.println("请输入天数(1-31):");
		int days = scan.nextInt();//调用
		
		//定义变量来保存总天数
		int sumDays = 0;
		switch(month) {
		case 12:
			sumDays += 30;
		case 11:
			sumDays += 31;
		case 10:
			sumDays += 30;
		case 9:
			sumDays += 31;
		case 8:
			sumDays += 31;
		case 7:
			sumDays += 30;
		case 6:
			sumDays += 31;
		case 5:
			sumDays += 30;
		case 4:
			sumDays += 31;
		case 3:
			if((year % 4 == 0 && year % 100 != 0)|| year % 400 == 0) {
				sumDays += 29;
			}else {
				sumDays += 28;
			}
		case 2:
			sumDays += 31;
		case 1:
			sumDays += days;
		}
		System.out.println(year + "年的" + month + "月" + days + "日是" + year + "年的第"+ sumDays+"天");
	}
}
/*
//结果
请输入年份:
2018
请输入月份(1-12):
3
请输入天数(1-31):
20
2018年的3月20日是2018年的第79天
*/
例题5
编写程序:从键盘上读入一个学生成绩,存放在变量score中,根据score的
值输出其对应的成绩等级:
score>=90 等级: A
70<=score<90 等级: B
60<=score<70 等级: C
score<60 等级: D
package com.atguigu.java;

import java.util.Scanner;//导包
public class SwitchCaseExer5 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);//实例化
		
		System.out.println("请输入你的成绩(0-100):");//不能超过100 或者 小于0 没有进行异常数据检测
		int score = scan.nextInt();//调包
		
		switch(score/10) {
		case 10:
		case 9:
			System.out.println("等级: A");
			break;
		case 8:
		case 7:
			System.out.println("等级: B");
			break;
		case 6:
			System.out.println("等级: C");
			break;
		default:
			System.out.println("等级: D");
		}
	}
}
/*
//结果
请输入你的成绩(0-100):
99
等级: A
*/

循环结构

for循环

for循环结构的使用
一 循环结构的4个要素
	1初始化条件
	2循环条件 ---Boolean类型
	3循环体
	4迭代条件
二 for循环结构
for(1初始化条件;2循环条件;4迭代条件){
	3循环体
}	

执行过程:1-->2-->3-->4-->2--->4--->2.....-->2
package com.atguigu.java;

public class ForTest1 {
	public static void main(String[] args) {
		for(int i = 1;i <= 5;i++) {
			System.out.println("Hello World!");
			// i:在for循环内有效,出了for循环就失效了
		}
		
		//练习  熟悉循环结构的执行过程
		int num = 1;
		for(System.out.print(‘a‘);num <= 3;System.out.print(‘c‘),num++) {
				System.out.print(‘b‘);
		}
		// a --> b -->c -->b--->c--->b----c 
		
		//遍历100以内的偶数,并输出所有偶数的和
		int sum = 0;
		for(int j = 1;j <= 100;j++) {
			if(j % 2 == 0) {
				sum += j;
				System.out.println(j);
			}
			System.out.println(sum);
		}
	}
}
例题1
编写程序从1循环到150,并在每行打印一个值,
另外在每个3的倍数行上打印出“foo”,
	在每个5的倍数行上打印“biz”,
	在每个7的倍数行上打印输出“baz”
package com.atguigu.java;

public class ForExer1 {
	public static void main(String[] args) {
		String printValue;
		
		for(int i = 1;i <= 150;i++) {
			printValue = "";
			printValue += i;
			
			if(i % 3 == 0) {
				printValue += " foo";
			}
			if(i % 5 == 0) {
				printValue += " biz";
			}
			if(i % 7 == 0) {
				printValue += " baz";
			}
			System.out.println(printValue);
		}
	}
}
例题2
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
比如:12和20的最大公约数是4,最小公倍数是60。

说明:break关键字的使用
package com.atguigu.java;

import java.util.Scanner;//导包
public class ForExer2 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);//实例化
		
		System.out.println("请输入第一个正整数:");
		int m = scan.nextInt();//调用
		System.out.println("请输入第二个正整数:");
		int n = scan.nextInt();//调用
		
		//获得两个数中的较小值
		int min = (m > n)?n:m;
		
		for (int i = min;i >= 1;i--) {
			if(m % i == 0 && n % i == 0) {
				System.out.println("最大公约数是"+ i);
				break;//一旦在循环中执行到break,就跳出
			}
		}
		
		//获得两个数中的较大值
		int max = (m > n)?m:n;
				
		for (int i = max;i <= m*n;i++) {
			if(i % m == 0 && i % n == 0) {
				System.out.println("最小公倍数是"+ i);
				break;//一旦在循环中执行到break,就跳出
			}
		}
	}
}
/*
//结果
请输入第一个正整数:
20
请输入第二个正整数:
12
最大公约数是4
最小公倍数是60
*/
例题3
public class ForExer3 {
	public static void main(String[] args) {
		//打印1~100之间所有奇数的和
		int sum = 0;
		for(int i = 1;i <= 100;i++) {
			if(i % 2 == 1) {
				sum += i;
			}
		}
		System.out.println("1~100之间所有奇数的和为" + sum);
        //1~100之间所有奇数的和为2500

        //打印1~100之间所有是7的倍数的整数的个数及总和(体会设置计数器的思想)
		int sumSeven = 0;
		int countSeven = 0;
		for(int i = 1;i <= 100;i++) {
			if(i % 7 == 0) {
				sumSeven += i;
				countSeven++;
			}
		}
		System.out.println("1~100之间7的倍数的整数的总和为" + sumSeven);
		System.out.println("1~100之间7的倍数的个数为" + countSeven);
	    //1~100之间7的倍数的整数的总和为735
        //1~100之间7的倍数的个数为14

	}
}

while循环

While循环结构的使用
一 循环结构的4个要素
	1初始化条件
	2循环条件 ---Boolean类型
	3循环体
	4迭代条件
二 while循环结构
1循环初始条件;
while(2循环条件){
	3循环体;
	4迭代条件;
}

执行过程:1-->2-->3-->4-->2--->4--->2.....-->2
 
说明:
1.写while循环千万小心不要丢了迭代条件。一旦丢了 可能导致死循环。
2.写程序要注意避免出现死循环
3.for循环和while循环是可以相互转换的!
	区别:for循环和while循环的初始化条件作用域不一样
package com.atguigu.java;

public class WhileTest {
	public static void main(String[] args) {
		//遍历 100 以内的所有偶数
		int i = 1;
		while(i <= 100) {
			if(i % 2 == 0) {
				System.out.println(i);
			}
			i++;
		}
	}
}

do-while循环

do-while循环结构的使用
一 循环结构的4个要素
	1初始化条件
	2循环条件 ---Boolean类型
	3循环体
	4迭代条件
二 do-while循环结构
1初始化条件;
do{
	3循环体;
	4迭代条件;
}while(2循环条件);

执行过程:1-->3-->4-->2-->3--->4--->2.....-->2
package com.atguigu.java;

public class DoWhileTest {
	public static void main(String[] args) {
		//遍历100以内的偶数
		int i = 1;
		do {
			if(i % 2 == 0) {
			System.out.println(i);
			}
			i++;
		}while(i <= 100);
	}
}
循环语句综合例题
从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入
为0时结束程序。

说明:
1.不在循环条件部分限制次数的结构:for(;;),while(true)
2.结束循环有几种方式?
	方式一:在循环条件部分返回false
	方式二:在循环体中,执行break
package com.atguigu.java;

import java.util.Scanner;//导包
public class AllExer1 {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);//实例化
		
		int sumPositive = 0,sumNegative = 0;
		//sumPositive 记录正数的个数
		//sumNegative 记录负数的个数
		while(true) {
			int number = scan.nextInt();//调包
			
			//判断正负情况
			if(number == 0) {
				break;
			}else if(number > 0) {
				sumPositive++;
			}else {
				sumNegative++;
			}
		}
		
		System.out.println("读入正数的个数为" + sumPositive);
		System.out.println("读入负数的个数为" + sumNegative);

	}
}
/*
//结果
5
-2
92
12
-2138
0
读入正数的个数为3
读入负数的个数为2
*/

嵌套循环

嵌套循环的使用
1.嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环
2.外层循环:B
     内层循环:A
3.说明
3.1内层循环结构遍历一遍,只相当于外层循环体执行了一次
3.2假设外层循环需要执行m次,内层循环需要执行n次,此时内层循环的循环体一共执行了m*n次
4.技巧
外层循环控制行数
内层循环控制列数
package com.atguigu.java;

public class ForForExer1 {
	public static void  main(String[] args) {
		//输出 ******
		for(int i = 1;i <= 6;i++) {
			System.out.print("*");
		}
		System.out.println("\n");
		//输出
		/*
		 ******
		 ******
		 ******
		 ******
		 */
		for(int j = 1;j <= 4;j++) {
			for(int i = 1;i <= 6;i++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}
例题1
输出
		 i(行数)	j(列数)
* 		 1			1 
**       2			2
***      3     		3
****     4     		4
package com.atguigu.java;

public class ForForExer2 {
	public static void main(String[] args) {
		
		for(int i = 1;i <= 4;i++) {
			for(int j = 1;j <= i;j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}
例题2
九九乘法表
1 * 1 = 1
2 * 1 = 2  2 * 2 = 4
....
9 * 1 = 9  9 * 2 = 18 9 * 3 = 27 
package com.atguigu.java;

public class NineNineTable {
	public static void main(String[] args) {
		for(int i = 1;i <= 9;i++) {
			for(int j = 1;j <= i;j++) {
				System.out.print(i + " * " + j + " = " + (i*j) + " ");
			}
			System.out.println();
		}
	}
}
例题3
输出100以内的质数
package com.atguigu.java;

public class PrimeNumberTest {
	public static void main(String[] args) {
		
		boolean isFlag;//标识符
		for(int i = 2;i <= 100;i++) {//遍历100以内的自然数
			isFlag = true;
			for(int j = 2;j <= Math.sqrt(i);j++) {//j:被i去除
				//Math.sqrt(i) 优化二:针对本身是质数自然数有效
				if(i % j == 0) {//i被j除尽
					isFlag = false;
					break;//优化一:只对本身非质数的自然数是有效的
				}
			}
			if(isFlag) {
				System.out.println(i);
			}
			
		}
	}
}

特殊关键字break,continue的使用

break和continue关键字的使用
			适用范围					循环中的作用
break:      switch-case,循环            结束当前循环

continue:   循环 						结束当次循环
package com.atguigu.java;

public class BreakTest {
	public static void main(String[] args) {
		
		for(int i = 1;i <= 10;i++) {
			
			if(i % 4 == 0) {
				//break;123
				continue;//123567910
			}
			
			System.out.print(i);
		}
		System.out.println();
		
		//*************
		label:for(int i = 1;i <= 4;i++) {
			
			for(int j = 1;j <= 10;j++) {
				
				if(j % 4 == 0) {
					//break;//默认跳出包裹此关键字的最近一次循环
					//continue;//默认结束包裹此关键字的最近一次循环
					
					break label;//结束指定标签的一层循环
                    //continue label;
				}
				System.out.print(j);
			}
			System.out.println();
		}
	}
}
/*
//结果
123567910
123
*/

参考

Java基础宋红康主讲

天问的博客

Java基础语法

原文:https://www.cnblogs.com/ccc-code/p/14727956.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!