1. 三元表达式的嵌套
int b=0 ;
int a = 1;
System.out.println( b = b == a?0:1);
举例子:
int a=10;
int b=9;
int c=8;
//求三个变量的最大值
System.out.println(a>b?a:(b>c?b:c));
//嵌套的三目循环执行顺序由外及里
而单目三元表达式等价
int b;
boolean a = false;
if(a){
b = 0;
}else{
b = 1;
}
2. 生成一个随机数
方法1:产生一个0到1的随机数
System.out.println("Math.random()=" + Math.random());
// 结果是个double类型的值,区间为[0.0,1.0)
int num = (int) (Math.random() * 3);
// 注意不要写成(int)Math.random()*3,这个结果为0,因为
//(int)Math.random()*3等于((int)Math.random())*3
//先执行了强制转换
方法2:
package baowenli;
import java.util.Random;
public class Practise {
public static void main(String[] args) {
/*想要获取一个范围内的随机数(例如26,随机数可能是0-25),首先需要一个种子(其实就是一个数值)。
每个种子会对应这个范围内(0-26)的唯一的一个随机数。
47这个种子在26这个范围内,所对应的随机数为24,所以每次随机得出的结果都为24.
(注意:47在26这个范围内对应的是24,这个是死的,固定的,无论你执行多少次,它还是24)
至于为什么种子47会对应24,这个涉及到java封装的算法,有兴趣可以深入了解。*/
Random r = new Random(46);
System.out.println("随机数列为:");
//第一个for循环
for (int i = 0; i < 5; i++) {
int ran1 = r.nextInt(10);
System.out.print(ran1+"\t");
}
//第二个for循环
// System.out.println();
// for (int i = 0; i < 5; i++) {
// int ran1 = r.nextInt(10);
// System.out.print(ran1+"\t");
// }
}
}
产生的随机数列;
当把第一个for屏蔽,执行第二个for后
package com.wdzl.demo06;
import java.util.Random;
public class Practise {
public static void main(String[] args) {
/*想要获取一个范围内的随机数(例如26,随机数可能是0-25),首先需要一个种子(其实就是一个数值)。
每个种子会对应这个范围内(0-26)的唯一的一个随机数。
47这个种子在26这个范围内,所对应的随机数为24,所以每次随机得出的结果都为24.
(注意:47在26这个范围内对应的是24,这个是死的,固定的,无论你执行多少次,它还是24)
至于为什么种子47会对应24,这个涉及到java封装的算法,有兴趣可以深入了解。*/
Random r = new Random(46);
System.out.println("随机数列为:");
//第一个for循环
// for (int i = 0; i < 5; i++) {
// int ran1 = r.nextInt(10);
// System.out.print(ran1+"\t");
// }
//第二个for循环
System.out.println();
for (int i = 0; i < 5; i++) {
int ran1 = r.nextInt(10);
System.out.print(ran1+"\t");
}
}
}
**随机数种子的作用:**第几个位置产生的随机数是固定的,不会更改。
//不带种子的:Random r = new Random();
//带种子的:Random r = new Random(5);
总结一下:
**Random的对象有两种构建方式:
- 带种子
- 不带种子
不带种子的方式将会返回随机的数字,每次运行结果不一样。无论程序运行多少次,带种子方式构建的Random对象会返回一样的结果。
Random() | 构成一个随机数 |
---|---|
Random(long seed) | 用种子seed构造一个随机数生成器 |
下面给几个例子:
1. 生成[0,1.0)区间的小数:double d1 = r.nextDouble();
2. 生成[0,5.0)区间的小数:double d2 = r.nextDouble() * 5;
3. 生成[1,2.5)区间的小数:double d3 = r.nextDouble() * 1.5 + 1;
4. 生成100之间的整数:int n = r.nextInt(100);
5. 生成[0,10)区间的整数:
//方法一
int n2 = r.nextInt(10);
//方法二
n2 = Math.abs(r.nextInt() % 10);
3. switch语句
Jdk4版本之前,
Switch( )括号里的值是int(包括 byte char short int)
jdk5版本 -----枚举型
jdk7版本之后------是 string 型
default位置 可以任意,可以没有default语句
4. Ascii码值
0——48
A——65
a——97
5.循环3条件
- 初始化条件变量
- 条件表达式
- 改变循环条件
6. while
7. do-while;
8. for循环
这里仅对for循环做强调
for循环的表达式一般如下:
for(表达式1;表达式2;表达式3){
表达式4;
}
执行的顺序为:
1)第一次循环,即初始化循环。
首先执行表达式1(一般为初始化语句),再执行表达式2(一般为条件判断语句),判断表达式1是否符合表达式2的条件,如果符合,则执行表达式4,否则,停止执行,最后执行表达式3.
2)下次的循环:
首先执行表达式2,判断表达式3是否符合表达式2的条件;如果符合,继续执行表达式4,否则停止执行,最后执行表达式3.如果往复,直到表达式3不再满足表达式2的条件。
9.continue 和 break;
break和continue的区别问题
1. break是跳出循环体
2. continue是终止本次循环,继续进入下次循环
break常用于switch结构和循环结构中
continue一般用于循环结构中
**相同点:跳出循环体后面语句的剩余部分**
10.可变长参数类型
- 可变长参数类型:jdk1.5开始
public int add(int...num) {
int sum = 0;
for (int i = 0; i < num.length; i++) {
sum +=num[i];
}
return sum;
}
public float add1(float...num) {
float sum=0;
for (int i = 0; i < num.length; i++) {
sum += num[i];
}
return sum;
}
public String add2(String...num) {
String sum="";
for (int i = 0; i < num.length; i++) {
sum += num[i];
}
return sum;
}
public char add3(char...num){
char sum=' ';
for (char i = 0; i < num.length; i++) {
sum += num[i];
}
return sum;
}
11.无返回值的方法
- 可以出现return 但是不能返回具体的值
12.进制转换:
//十进制转为其他进制
一个十进制数转换为二进制
一个十进制数转换为八进制
一个十进制数转换为十六进制
System.out.println(b10+"的二进制:"+Integer.toBinaryString(b10));
System.out.println(b10+"的八进制:"+Integer.toOctalString(b10));
System.out.println(b10+"的十六进制:"+Integer.toHexString(b10));
将数字类型的字符串转换为整形:
int number = Integer.parseInt("1234");
例题1:打印三角形
package progect1_2;
public class Triangle {
public static void main(String[] args) {
for(int i = 0;i<4;i++) {
for(int j = 0;j< 4-i-1;j++) {
System.out.print(" ");
}
for(int j = 0;j< 2*(i+1)-1;j++) {
System.out.print("*");
}
System.out.println();
}
}
}
例题2:打印对称三角形
package diertian;
public class SymTriangle {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
for (int j = 0; j < 2*i-1; j++) {
System.out.print("*");
}
for (int j = 0; j < 41-2*(2*i); j++) {
System.out.print(" ");
}
for (int j = 0; j < 2*i-1; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
例题3:打印菱形
package progect1_2;
public class Diamond {
public static void main(String[] args) {
for(int i = 0;i<4;i++) {
for(int j = 0;j<4-i-1;j++) {
System.out.print(" ");
}
for(int j = 0;j<2*(i+1)-1;j++) {
System.out.print("*");
}
System.out.println();
}
for(int i = 0;i<3;i++) {
for(int j = 0;j<i+1;j++) {
System.out.print(" ");
}
for(int j=0;j<5-2*i;j++) {
System.out.print("*");
}
System.out.println();
}
}
}
例题4:打印空心菱形
package progect1_2;
public class NoDiamond {
public static void main(String[] args) {
//i的值决定上面半个菱形的行数
//更改1
for(int i = 0;i<15;i++) {
//这个for循环里的4必须和上面的4对应
//更改2
for(int j =0;j<15-i-1;j++) {
System.out.print(" ");
}
for(int j =0;j<(2*(i+1)-1);j++ ) {
if(j>=1&&j<2*i) {
System.out.print("-");
}else {
System.out.print("*");
}
}
System.out.println();
}
//第二个for循环里i的值比第一个i的值要小1
//更改3
for(int i = 0;i<14;i++) {
for(int j=0;j<i+1;j++) {
System.out.print(" ");
}
//注意:更改 这个for循环里的7必须和上面for循环里的 7对应
//更改4
for(int j = 0;j<(2*14-1)-2*i;j++) {
//更改5
if( j>=1&&j<((2*14-2)-2*i)) {
System.out.print("-");
}else {
System.out.print("*");
}
}
System.out.println();
}
}
}