目录
1、思维导图
2、类型转换
类型转换就是7种基本数据类型之间的转换,按照类型转换范围大小可分为自动类型转换和强制类型转换,数据范围如下:
自动类型转换:将数据范围小的类型转换为数据范围大的类型
double d = 10;
System.out.println(d);
强制类型转换:将数据范围大的类型转换为数据范围小的类型
int a = (int)3.14;
System.out.println(a);
3、键盘输入
键盘输入中要用的是Scanner类,这个类的软件包再java util里,所以在用之前要导包,导包格式:在主方法上面,写上:import java.util.Scanner;
然后开始创建对象,因为java是面向对象的语言,所以所有方法都是用对象来调用的,创建完之后,再根据自己要输入的内容,定义接受的对象即可
import java.util.Scanner;
public class Scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
几种常见的用法:
输入类型 | 用法 |
整数型 | nextInt() |
浮点数型(double) | nextDouble() |
字符串型 | next(),nextLine();(后者不常用) |
4、运算符
1、算术运算符
算术运算符一共有5个,+ - * / %
在数字类型的运算里面,和我们以前在数学上的用法是一样的,比较简单,博主就不具体用代码举例了
在字符里的就稍微有一些复杂了,当一个字符做+的时候,字符会变成数字参与加法,每个字符都有一个对应的底层的ASCII码,当字符做+时,字符便会转换成ASCII中对应的数字
例如:'a'——>97 ‘A’——>65 '0'——>48
记住这三个开头的码,那么后面的字母或者数字往后数就行了
汉字也是有对应的ASCII码的,不过没有规律,这也是汉字不能作为编程语言的原因之一
字符串里面的+,就是把两个字符串拼接,组成一个更长的字符串
需要注意的是:%,这个不是百分比的意思,而是取余,Java里没有百分比的概念
2、赋值运算符
赋值运算符,顾名思义就是给变量赋值的运算符,一共有6个
= += -= *= /= %=
这个也比较简单,会一个,其余的也就会了,例如+=
int a=10;
a=a+10;
a+=10;
其中a=a+10;和a+=10;是一个意思,其余的也如此类推
需要注意的是,=不读作等于,而是赋值,等于号是下文中提到的==
3、自增自减运算符
++ 和 --
++给变量+1,--给变量减1,需要注意的是,自增自减运算符与变量位置的不同,那么运算也不同
当运算符前置,也就是运算符位于变量前面的时候,变量先+1,再进行运算
当运算符后置,也就是运算符位于变量后面的时候,变量先进行运算,再+1
4、关系运算符
一共有6个:
> < == != >= <=
这里的==就是真正的等于号了,然后比较陌生的就是!=了,这个是不等于
关系运算符的结果一定是一个布尔值
5、逻辑运算符
逻辑运算符有三个:&& || !
a && b
&&:逻辑与,当两边都是true的时候,结果才为true,两边只要有一个false,结果就为false
a || b
||:逻辑或,当两边只要有一个是true的时候,结果就是true,两边都是false,结果才为false
! a
!:取反,如果原来是true,取反后就是false
&&和||中,都各包含一个短路效果:
&&:如果左边已经是false的话,右边不执行
||:如果左边已经是true的话,右边不执行
6、三元运算符
三元运算符是在两个结果中选一个出来,通常用作比较两数大小
格式:关系表达式?结果A:结果B;
如果关系表达式为true,则输出A,如果为false,则输出B
int a = 30;
String s = a>20 ? "a大于20" : "a不大于20";
System.out.println(s);
7、左移右移运算符
就是给变量数字底层的二进制进行移动
格式: 数字>>移动的位数
例如:4>>1,就是给4这个数字底层二进制向右移动1位
4的二进制数字:00000100
移动前:
00000100 |
移动后:
0000010 | 0 |
再进行补0,就变成了00000010,也就是2
所以右移一位,就相当于除2,以此类推,左移一位就相当于乘2
5、判断
1、if
f 语句是使用最多的条件分支结构。
例如当我们登录QQ的时候,如果密码正确,就登陆成功,如果密码错误,就登陆失败,这就是一个if判断
if 语句的最简语法格式如下,表示“如果满足某种条件,就进行某种处理”。
if的三种格式
第一种:
if(布尔表达式){
语句体;
任意行代码;
}
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
int a = sc.nextInt();
if(a>10){
System.out.println(a + "大于10");
}
第二种:
当单 if 语句仅能在满足一个条件的判断,而无法执行任何其他操作的时候,就该用第二种格式:if…else 语句。表示“如果条件正确则执行一个操作,否则执行另一个操作”。
if(布尔表达式){
语句体1;
}else{
语句体2;
}
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
int a = sc.nextInt();
//判断
if(a%2==0){
System.out.println(a+"是偶数");
}else{
System.out.println(a+"是奇数");
}
第三种:
然而,有时候程序中仅仅多一个分支是远远不够的,甚至有时候程序的分支会很复杂,这就需要使用多分支的 if…else if 语句。
if(布尔表达式1){
语句体1;
}else if(布尔表达式2){
语句体2;
}else if(布尔表达式3){
语句体3;
}else{
语句体4;
}
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
int a = sc.nextInt();
//判断
if(a>0){
System.out.println(a + "是正数");
}else if(a<0){
System.out.println(a + "是负数");
}else{
System.out.println(a + "是零");
}
2、switch
switch也是判断语句,与if判断的区别就是:if更偏向用范围型,而switch偏向用于几种情况
格式:
switch(变量) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…
default:
语句体n+1;
[break;]
}
switch中,变量的数据类型只能放6种:byte,short,int,char,String,枚举
还要注意,在每个case后面都要加一个break,用来跳出判断,如果没有break,则会造成穿透,程序就不会判断,直接执行下面的代码,直到遇见break为止
6、循环
1、for循环
格式:
for(初始化语句;条件判断语句;条件控制语句){
循环体语句;
可以写任意行;
}
执行流程: 初始化语句-->条件判断语句-->循环体语句-->条件控制语句
-->条件判断语句-->循环体语句-->条件控制语句
-->条件判断语句-->循环体语句-->条件控制语句
for(int i=0;i<10;i++){ // 0 1 2 3 4 5 6 7 8 9
System.out.println("to be No.1");
}
2、while循环
格式:
初始化语句;
while(条件判断语句){
循环体语句;
条件控制语句;
}
int i=1;
while(i<=5){
System.out.println(i);
i++;
}
while循环有个常用的死循环格式:
while(true){
}
3、do...while循环
格式:
初始化语句;
do {
循环体语句;
条件控制语句;
} while(条件判断语句);
do...while循环一般是不用的,了解就行
三种循环的区别:
for:适合用于明确循环次数的情况
while:适合用于不明确循环次数的情况
do...while:先循环再判断(基本没用)
4、循环跳转语句
break | 用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环 |
contiune | 用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行 |
5、循环嵌套
指的就是:在循环中再加入循环,下面列举一个我在刚接触嵌套时,难住我的一个例题:
题目:判断101-200之间有多少个素数,并输出所有素数。
public static void main(String[] args) {
for (int i = 101; i <201; i++) {
int count=0;
for (int j = 2; j <i; j++) {
if (i%j==0){
count++;
}
}
if (count==0){
System.out.println("素数是:"+i);
}
}
}
首先,素数是指,只能被1和它本身整除,除此之外如果还有能够整数这个数的数,那么这个数就不是素数,所以判断他是不是素数,可以让他除以从2到它本身之前的数
所以外循环定义题目中的范围,也就是101——200
内循环定义要除的数,也就是从2到变量i前面的数,也就是i-1
我做的过程中犯的错误:
1、if判断那里:当i%j==0的时候,也就是说它还有别的整数能整除他,所以它不是素数,但是接下来是不能写else的,因为循环还没除完,不能说他就是素数了
2、count写在了循环外面,这样会导致:在输出第一个素数之后,count就不可能再会是0了
7、Random随机数
可以获取一个随机生成的数字
它与Scanner一样,都需要先导包才能使用
1.导包
import java.util.Random;
2.创建对象
Random r = new Random();
3.生成随机数
int i = r.nextInt(数字);
这个数字,输入多少,就表示0-该数字的范围内取一个数,比如我输入10,那么就会取0-9范围内的数字
如果要从一个范围到一个范围取数,例如我想取n-m之间的某个数,那么格式为:
int i = r . nextInt(m-n+1)+n;