- java学习笔记2(datawhale教程):运算符和表达式、流程控制、数组
- 一.运算符和表达式
- 1.数学函数与常量
- 2.结合赋值和运算符
- 3.自增与自减运算符
- 4.关系和Boolean运算符
- 5.运算符优先级
- 二.控制流程
- 1.块作用域
- 2.条件语句(if 、else)
- 3.循环(while 、do while)
- 4.确定循环(for 循环)
- 5.中断控制流程语句
- 6.选择语句(switch)
- 三.数组
- 1.数组的定义与初始化
- 2.for-each循环
- 3.多维数组(二维数组为例)
- 创建二维数组
- 赋值
- 来点好玩的遍历!
- 4.不规则数组
- 还是来个好玩的遍历
- 四.遇到的问题
- 1.for each
- 2.数组越界
一.运算符和表达式public static void main 是什么意思?
【IntelliJ IDEA】IDEA自动生成文档注释的设置方法
| 运算符 | 功能 |
|---|---|
| + | 加 |
| - | 减 |
| * | 乘 |
| / | 除 ,两个操作数都是整数时,表示整除法;否则表示浮点除法 |
| % | 整数取余 |
-
数学函数包含在Math类中
Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用
-
一些常用的如:
-
求平方根:
额,草率了
package com.apache.test; public class HelloWorld { // enum Size {SMALL,MEDIUM,LARGE,EXTRA_LARGE}; // Size s = Size.MEDIUM; public static void main(String[] args) { double x = 4; double y = Math.sqrt(x); System.out.println(y); } } -
幂运算
pow方法有两个double类型的参数,其返回结果也为double类型
package com.apache.test; public class HelloWorld { // enum Size {SMALL,MEDIUM,LARGE,EXTRA_LARGE}; // Size s = Size.MEDIUM; public static void main(String[] args) { double x=2; double a=3; double y=Math.pow(x,a); System.out.println(y); } }y为x的a次方
-
三角函数
public class HelloWorld { public static void main (String []args) { System.out.println("45 度的正弦值:" + Math.sin(Math.PI/4)); System.out.println("0度的余弦值:" + Math.cos(0)); System.out.println("60度的正切值:" + Math.tan(Math.PI/3)); System.out.println("1的反正切值: " + Math.atan(1)); System.out.println(Math.PI); } }
-
-
若不想添加前缀Math,就在源文件顶部添加代码:import static java.lang.Math.*;
package com.apache.test; import static java.lang.Math.*; public class HelloWorld { public static void main (String []args) { System.out.println("45 度的正弦值:" + sin(Math.PI/4)); System.out.println("0度的余弦值:" + cos(0)); System.out.println("60度的正切值:" + tan(Math.PI/3)); System.out.println("1的反正切值: " + atan(1)); System.out.println(Math.PI); } }
+=、*=、%=
package com.apache.test;
import static java.lang.Math.*;
public class HelloWorld {
public static void main (String []args)
{
int x=1;
x+=4;
//等价于x=x+4
int y=1;
y=y+4;
System.out.println(x);
System.out.println(y);
}
}
3.自增与自减运算符
package com.apache.test;
public class HelloWorld {
public static void main (String []args)
{
int m = 7;
int n = 7;
int a = 2* ++m;
int b = 2* n--;
System.out.println("a="+a);
System.out.println("b="+b);
}
}
4.关系和Boolean运算符
下面演示==,!=,&&(逻辑与),||(逻辑或),x?y:z(三目运算符)等运算符
package com.apache.test;
public class HelloWorld {
public static void main (String []args)
{
int x=3;
int y=7;
System.out.println(3==7); //返回false
System.out.println(3<7); //返回true
System.out.println((3<7)&&(3>7)); //返回false
System.out.println((3<7)||(3>7)); //返回true
System.out.println((3>7)?3:7);
System.out.println((3!=7)?3:7);
}
}
5.运算符优先级 二.控制流程位运算符就暂时不探究了 (流下懒狗的眼泪)
- 用条件语句和循环结构来确定控制流程
- 块由一对大括号括起来的语句
- 块确定了变量的作用域
- 一个块可以嵌套在另外一个块里面
- 但是不能在嵌套的两个快中声明相同名的变量
和之前的C++区别不大
package com.apache.test;
public class HelloWorld {
public static void main (String []args)
{
int x = 31;
if( x == 10 ){
System.out.print(" X is 10");
}else if( x == 20 ){
System.out.print(" X is 20");
}else if( x == 30 ){
System.out.print(" X is 30");
}else{
System.out.print("这是 else 语句");
}
}
}
3.循环(while 、do while)
和之前的C++区别不大
4.确定循环(for 循环)和之前的C、C++区别也不大
5.中断控制流程语句continue、break
6.选择语句(switch)语法和之前的C、C++区别还是不大
case 、default
三.数组 1.数组的定义与初始化别忘了加break
-
声明数组变量
dataType[] arrayRefVar; //首选的方法 dataType arrayRefVar[]; //效果相同,但不是首选
下面那种是来自C/C++风格的声明数组的形式, 首选上面那种JAVA风格的
-
创建数组
接着上面的声明数组变量
-
new操作符
arrayRefVar = new dataType[arraySize]; //元素
上面的语法完成了两件事:
- 用dataType[arraySize]创建了一个数组
- 把新创建的数组的引用赋值给变量arrayRefVar
-
-
声明和创建数组一条语句完成
-
格式1
元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; dataType[] arrayRefVar = new dataType[arraySize];
-
格式2
元素类型[] 数组名 = new 元素类型[]{元素,元素,……}; 元素类型[] 数组名 = {元素,元素,……}; dataType[] arrayRefVar = {value0,value1,...,valuek};
和C语言一样:索引从0开始,索引值从 0 到 arrayRefVar.length-1
-
-
来看些例子呀
package com.apache.test; public class HelloWorld { public static void main (String []args) { double[] myList; //首选 double myList2[]; //非首选 int[] arr1 = new int[5]; float[] arr2 = new float[5]; int[] arr3 = new int[]{3,5,1,7}; double[] arr4 = {1.3,1.1,1.5,1.7}; float[] arr5 = new float[]{1.9f,1.1f,1.5f,1.7f}; int[] arr6 ; arr6 =new int[2]; arr6[0] = 1; arr6[1] = 2; for(int i=0;i -
注意下面这种错误写法
数组初始化中一定要用运算符new
2.for-each循环一开始float一个数组遇到报错,查了一下:
也叫加强型循环,用于在不使用下标的情况下遍历数组
-
语法格式
for(数据类型 element: 数组名){ System.out.println(element); }double[] myList=new double[]{1.1,1.2,1.5,1.9,2.1,3.3,3.5,9.9}; // for(double element:myList) // { // double i=1.0; // element=i; // ++i; // // } for(double elem : myList) { System.out.println(elem); }
同一维数组一样,二维数组在声明时也没有分配内存空间,同样要使用关键字new来分配内存,然后才可以访问每个元素
-
通过例子来看两种声明方式和分配内存的方式
//直接分配行列 int a[][]; a = new int[2][4]; //先分配行,再分配列 int[][] b; //另一种声明方式 b = new int[2][]; b[0] = new int[2]; //给第一行分配列 b[1] = new int[2]; //给第二行分配列
-
声明和创建数组一起
//直接分配行列 int a[][] = new int[2][]; a[0] = new int[3]; a[1] = new int[3];
-
注意点
-
来看三种初始化的方式
public static void main (String []args) { int tdarr1[][]={{1,3},{5,9}}; int tdarr2[][]=new int[][]{{1,3},{5,9}}; //先给数组分配内存空间 int tdarr3[][]=new int[2][3]; tdarr3[0] = new int[] {6,54,71}; //给第一行分配一个一维数组 tdarr3[1][0]=1; tdarr3[1][1]=2; tdarr3[1][2]=4; }
package com.apache.test;
public class HelloWorld {
public static void main (String []args)
{
char arr[][]= new char[8][];//8行的二维数组
arr[0] = new char[]{'锦','瑟','无','端','五','十','弦'};
arr[1] = new char[]{'一','弦','一','柱','思','华','年'};
arr[2] = new char[]{'庄','生','晓','梦','迷','蝴','蝶'};
arr[3] = new char[]{'望','帝','春','心','托','杜','鹃'};
arr[4] = new char[]{'沧','海','月','明','珠','有','泪'};
arr[5] = new char[]{'蓝','田','日','暖','玉','生','烟'};
arr[6] = new char[]{'此','情','可','待','成','追','忆'};
arr[7] = new char[]{'只','是','当','时','已','惘','然'};
System.out.println("-----横版-----");
for(int i=0;i<8;i++)
{
for(int j=0;j<7;j++)
{
System.out.print(arr[i][j]+" ");
//System.out.print 不换行
//System.out.println 换行
}
if(i%2 == 0)
{
System.out.println(",");
}
else {
System.out.println("。");
}
}
System.out.println("-----竖版-----");
for(int j=0;j<7;j++)
{
for(int i=7;i>=0;i--)
{
System.out.print(arr[i][j]+" ");
}
System.out.println(" ");
}
System.out.println("。 , 。 , 。 , 。 ,"); // 输出最后的标点
}
}
4.不规则数组
还是来个好玩的遍历
下面用了普通循环和for each循环
package com.apache.test;
public class HelloWorld {
public static void main (String []args)
{
char arr[][]= new char[4][];//4行的二维数组,不指定列数
arr[0] = new char[]{'众','里','寻','他','千','百','度'}; //第一行分配7个元素
arr[1] = new char[]{'蓦','然','回','首'}; //第二行分配4个元素
arr[2] = new char[]{'那','人','却','在'}; //第三行分配4个元素
arr[3] = new char[]{'灯','火','阑','珊','处'}; //第四行分配5个元素
for(int i=0;i
- 注意上面代码中:
- arr.length返回的是数组的行数
- arr[i].length返回的是第i+1行的列数
- 由于二维数组可能是不规则数组,所以每一行的列数量可能不相同,因此在遍历二维数组时,最好使用数组的length属性控制循环次数,而不是用某他变量或常量。
四.遇到的问题
1.for each
有个❓问题
好像for-each只能用于遍历打印?
我写了这个赋值的循环发现没有效果
2.数组越界
查了一下原因,是数组越界了
原来是因为七言律诗被我搞成了八言…



