大数据学习2019.03.13
Java SE 基础语法
Tips for loops
- 如果有固定次数,用for;
- 如果必须执行一次,用do...while;
- 其他情况用while。
复合赋值运算符
a = a + 6 | a += 6 |
a = a - 6 | a -= 6 |
a = a * 6 | a *= 6 |
a = a / 6 | a /= 6 |
a++,++a | a = a + 1 |
a--,--a | a = a-1 |
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package test01; public class Test19 { public static void main(String[] args) { int a = 10, b; b = a++; System.out.println("a=" + a + "," + "b=" + b); a = 10; b = ++a; System.out.println("a=" + a + "," + "b=" + b); a = 10; b = a--; System.out.println("a=" + a + "," + "b=" + b); a = 10; b = --a; System.out.println("a=" + a + "," + "b=" + b); } } //运行结果为: //a=11,b=10 //a=11,b=11 //a=9,b=10 //a=9,b=9
循环控制
1.求素数
package test01; import java.util.Scanner; public class Test20 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int isPrime = 1; for (int i = 2; i < n; i++) { if (n % i == 0) { isPrime = 0; break; } } if (isPrime == 1) { System.out.println(n + "是素数。"); } else { System.out.println(n + "不是素数。"); } } }
break vs continue
- break:跳出循环;
- continue:跳过当前循环,进入下一次循环。
循环嵌套(多重循环)
如何写程序输出100以内的素数?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package test01; public class Test21 { public static void main(String[] args) { for (int n = 2; n < 100; n++) { int isPrime = 1; for (int i = 2; i < n; i++) { if (n % i == 0) { isPrime = 0; break; } } if (isPrime == 1) { System.out.print(n + " "); } } } } //程序的运行结果为:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 //53 59 61 67 71 73 79 83 89 97
如何写程序输出前50个素数?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package test01; public class Test22 { public static void main(String[] args) { int count = 0; int n = 2; while (count < 50) { int isPrime = 1; for (int i = 2; i < n; i++) { if (n % i == 0) { isPrime = 0; break; } } if (isPrime == 1) { System.out.print(n + " "); count++; } n++; } } }
如何使用一个break跳出多重循环?
在循环前可以放一个标号来标示循环:
label:
带标号的break和continue对那个循环起作用。
public class Test02{ public static void main(String[] args){ OUT: for(int i = 1;i<=5;i++){ for(int j = 1;j<=3;j++){ //System.out.println("("+i+","+j+")"); if(i == 2){ break OUT; } System.out.println("("+i+","+j+")"); } } } }
逻辑类型
逻辑运算是对逻辑量进行的运算,只有逻辑量可以参与运算。
运算符 | 描述 | 实例 | 结果 |
! | 逻辑非 | !a | 如果a是true,结果就是false,如果a是false,结果就是true。 |
&& | 短路与 | a && b | 如果a,b都是true,结果就是true,否则就是false。 |
|| | 短路或 | a || b | 如果a和b有一个是true,结果为true;两个都为false,结果为false。 |
优先级:!>&&>||
求最大公约数
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package test01; import java.util.Scanner; public class Test23 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int a = in.nextInt(); int b = in.nextInt(); int min = a > b ? a : b; int res = 1; for (int i = 2; i < min; i++) { if (a % i == 0 && b % i == 0) { res = i; } } if (res != 1) { System.out.println(a + "和" + b + "的最大公约数为:" + res); } else { System.out.println(a + "和" + b + "的最大公约数为1"); } } }
方法二:辗转相除法
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package test01; import java.util.Scanner; public class Test23 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int a = in.nextInt(); int b = in.nextInt(); int res = 0; int oa = a; int ob = b; while(b!=0) { res = a%b; a = b; b = res; } System.out.println(oa+"和"+ob+"的最大公约数是"+a); } }
Java数组
创建数组
数组
是一种容器,特点是:
- 其中的元素具有相同的数据类型;
- 一旦创建,不能改变大小。
定义数组变量
<类型>[] <名字> = new <类型>[元素个数]
例
int[] grades = new int[100]; double[] averages = new double[20];
- 元素的个数必须是整数;
- 元素的个数必须给出;
- 元素个数可以是变量;
直接初始化数组
int[] scores = {87,95,65,87,88,87,86};
- 直接用大括号给出数组的所有元素的初始值
- 不需要给出数组的大小,编译器替你数
数组变量赋值
- 数组变量是数组的管理者而非数组本身;
- 数组必须创建出来然后交给数组变量来管理;
- 数组变量之间的赋值是管理权限的赋予;
- 数组变量之间的比较是判断是否管理同一个数组。
复制数组
必须遍历数组将每一个元素逐一拷贝给目的数组。