|
该用户从未签到
|
1. while
& d. i* K$ E& q6 p# _ While 循环控制
' m' w! \' N8 ? w1 E: @
8 F3 a: X( v6 A! Z$ v( e Scanner console = new Scanner(System.in);- U4 t% I0 O9 z1 I& j4 k9 U
while(布尔表达式){ v2 k1 s' ?4 e* Z& S9 ?6 s
qty = console.nextInt();
( j: ^1 E, r/ S Z' u if(qty>0 && qty<=5){ //五个以内. W8 B4 S/ `5 A& X9 s- ?, I
break; //打断, 打断当前循环! p$ Q* I) ~- {; B$ Z* Q) J2 F
}! F2 Q3 \/ O. P9 X6 S/ z$ ~
}
3 t( U. | ], h9 |% G) v. H9 p, U/ l, C% {" c5 q7 C1 }
2. for 循环(主要用于几次的循环)8 @8 J( C6 a. g6 \4 [, n& v, C% t
循环控制( d6 B O$ \+ g" s
for(初始化表达式;布尔表达式; 递增表达式){
7 A7 D" J! x# l6 H //循环体$ D6 c5 C; }6 M; m
}
7 p8 f2 W% Y* l! _/ a4 z for(;;){9 }2 `9 i4 M5 i1 v
}
0 D1 d1 S! y: b! X) n; z/ W for(int a=1, b=3;;){5 x/ a! W! V1 d/ a6 y7 O$ p
}
, u2 S6 d# m* k' V6 k1 O. Q0 x
9 j6 [* |. K+ y2 X! Q7 K7 P( D
1 H2 N0 o. v+ F$ \ Example:# O7 F$ O9 |( M7 }# y) ~: u
for (int i = 0; i < array.length; i++){
& \ C5 G% n8 z% F/ i- c$ E9 |# } System.out.println(i);
. q$ P. q5 M% H) F! z9 @/ U }
; }2 g) w3 u4 E0 g+ M$ Y
- g3 Q: G6 e+ d c9 M! ]+ ^/ C+ M3. do ... while0 m6 H6 V; `' {; P
do ... while() 循环控制7 @) v9 ^+ a* s! `( Y! ~) @4 y
do{ _$ o# Y# S+ T3 j( k8 c
//循环体
% C! k) q" L$ {8 g$ k( X }while(布尔表达式);! S7 i V& U$ L9 S; {8 Z
Example:4 b3 y. Z, a& s. {7 s4 U9 j; ?
do{
( ~4 r, K q: P0 h7 {2 X' [# Q* u9 z System.out.print("输入押注数量:");/ \( I k/ |0 T/ q, l% J
bet = console.nextInt();" \- V( T& C1 O: ^4 K* h
}while(bet <= 0 || bet > balance); //否定条件! ]& \7 B, U. d; l7 v2 L5 E. s
0 E0 [$ q7 Z( ^; T" w
4. java Array% V8 H" P( X9 L
1) 数组变量的声明
% _/ {5 a# _' B# c! W int[] ary; 声明了数组变量 ary, 数组变量是代词,1 u0 D0 N* Q! r, m% z
int ary[]; 为了与C语法兼容的写法, 不建议写法,
. }4 M$ U" z" \6 N6 V( E1 U$ {1 T$ e/ J
2) 数组对象动态初始化
0 y7 `- O6 g, f r2 O* }" D+ r3 G4 h/ C ary = new int[4]; //数组变量引用了具体数组对象, 就是代词
' A" c/ S' R# n6 G3 m, T& h" K 指代了具体事务.% N1 i' S% a7 s- H$ s
数组元素是自动初始化的, 自动初始化为"零"值.; a% S+ T. z' R1 U" b
"零"值: 0, 0.0, \u0000, false, null% _) e2 `. [4 n1 ~3 V; @/ s
ary = new int[]{1,2,3}; 直接给出元素的初始化
6 @% ^. ]5 o3 I7 d 3) 数组对象的静态初始化, 只能用在声明数组变量时候同时初始化
; K+ v+ V6 w1 n! r r7 I * 不能用于赋值语句
0 D) f% R+ Y2 j int[] ary = {1,2,3};" f( X; v. Z1 O
ary = {3,4,5,6};//编译错误
% _- u; j* H: A }
6 y/ ~# z8 E# U& F Java关键字: if, public, class, else, while. {. ]. E. X# v$ o' }
特殊关键字: goto, const
2 q# a1 E; p0 U3 P java中 true, false, null 不是关键字, 是字面量!3 B& G/ w( ?& q- \7 {0 i
8 L0 d. ?1 _% V
4) 数组变量, 数组对象, 数组元素
! M: ~ l+ f0 y& J1 L 如: int[] ary = {1,2,3};
7 v( V2 S8 E8 ]; I' [ X) O ary 是 数组变量 指代一个具体的数组, 同一个变量指代不同的数组
* k' J# x) ^2 l. ?" a( v% P' A8 B% | {1,2,3} 数组对象
- @4 r) r2 `( g& W 1,2,3 是数组元素: Z/ X G" o4 z+ R$ b/ _! C
; ^1 J2 {6 p5 N* O }
5) 数组元素的访问, 数组对象的大小是固定的,长度是n,下标: 0~n-1 ! p5 n9 |; @) u
A 使用[下标] 访问数组元素
" m7 C$ |3 S o3 u; A. n B 越界访问(小于0/大于等于n), 都会发生运行异常" i k' c8 o$ H
C 使用.length 属性可以获取数组对象长度
( i; b1 a4 [/ Q- B6 {" G- U( Y+ ]
& G: i! N5 U( |& T h5 数组的复制与动态扩展算法
* D" G6 `( P4 N2 o) H. P 1) 数组对象的复制
: |( ~: \/ `! G2 ~& S
% f% J# \. ~: }- F2 z* a. s- L 2) 数组的扩展问题; d( |# q/ r% ?- f
1 Java数组对象的大小是固定的, 数组对象是不能扩展的' L) I$ ~. g! U1 u! f2 |! I
2 利用数组复制到方法可以变通的实现数组扩展5 ?; [( w( v6 q( a6 K
3 System.arraycopy() 可以复制数组
2 e4 }% g9 @. ~3 h# T 4 Arrays.copyOf() 可以简便的创建数组副本7 _) I! t+ {5 G3 G$ A/ Y# ?
5 创建数组副本的同时将数组长度增加就变通的实现了
7 s* Z' T! D) w& A! p7 n9 O 数组的扩展
: g& r- { }1 _4 h# w% Q% u' Q$ N/ W7 S4 z7 R9 k h3 A0 H. ?3 K6 {
案例1 : 统计一个字符在字符串中的所有位置.
) M6 O' k- ^) d/ e9 E, t |' V 字符串: 统计一个字符在字符串中的所有位置9 M v9 o. h! j' r5 G9 n# m1 H) z
字符: '字'+ y9 p* e' O, o% `% Y) r8 t
返回: {4,7}
# ^4 P" L$ k* G* ^5 P& S8 U- z% W5 q
6) 数组的迭代: 将每个数组元素重复的处理一遍.( [( G0 u# l% M p* E: p
for(int i=0; i<ary1.length; i++){8 s5 A; L6 P' y1 u0 f4 W# o
System.out.print(ary1[i] + " ");
; u% r% L4 W1 ?+ v1 w }
) V1 O! M1 l4 I( [# O1 T& m/ P9 _& [0 k2 ]( @5 d( M
作业:
- B4 q# @8 U# v O 1 复习并且完成 全部 课堂演示代码, 添加适当的
1 A$ V+ s7 n: [0 _1 ?9 j+ w 输出语句, 研究输出结果, 添加适当的注释.5 W) a* u. S1 D. D# `1 i5 w. Y% R
2 实现案例:" V. z0 G+ [7 f) x, J, `# N
案例1 : 统计一个字符在字符串中的所有位置.
1 o2 M% s9 Q0 t: y4 b 字符串: 统计一个字符在字符串中的所有位置: G8 Y c8 b1 [
字符: '字'/ T$ [7 T, l: P( N
返回: {4,7}, Z9 U6 s C, V) n9 Q; w9 B
public static int[] count(String str, char key){}
0 N, ^; h& O; X& ?5 b, @+ u
1 m& Q4 O8 S" h- W& O char key = '字';' M$ i6 Y/ Q/ R# X9 c
String str = "统计一个字符在字符串中的所有位置";
+ z- ~0 \: ]* K* M int[] count = {}; , f7 u( Z% g, j+ G7 Y" V+ l
for(int i=0; i<str.length();i++){1 F9 }1 J y/ |3 g& h4 p& y, Y
char c = str.chatAt(i);
* I( U# d$ W/ A/ H' u" L" y1 b' S if(c==key){
/ l: k G5 N @' D$ l //扩展数组,
1 {9 O) p! }+ k6 z- m count = Arrays.copyOf(count, count.length+1);3 l6 n/ ?" `* N3 j( v0 f0 V
//添加序号 i
4 u/ c" C P+ E# ^: S count[count.length-1]=i;
* V& ?) g7 X g/ I }
) X. ]$ H0 _8 m4 Z! m. v }2 v: D( J1 f5 Y# \
0 @* U9 G" G6 ?- @" n8 z) ]* I: l
5 z9 e' u W# v 案例2 : 统计一个字符在字符数组中的所有位置.0 s9 ]0 F. n6 |" {/ A5 E
字符数组: 统计一个字符在字符串中的所有位置
+ g; f( z4 E' d2 Q$ @8 E- o$ K! W 字符: '字'0 p% a2 ^; P8 s9 p- h
返回: {4,7}
& E( K- K2 n/ B/ Y" q e! l
8 ^6 U' h: _1 C! M/ W4 \ 案例3: 字符串统计案例:: P1 w& T/ P0 s- `$ F
字符串: "123456789012"
" B8 U& t8 `/ _+ |" @1 h 将字符串的奇数位数字相加为 c1 = 1 + 3 + 5 + 7 + 9 + 1! @1 h% F' }) B5 `: x! D. `
将字符串的偶数位数字相加为 c2 = 2 + 4 + 6 + 8 + 0 + 2
U9 v. _* n& g+ P; d$ C3 q+ c# ?# R/ q8 i8 S. v" G a& s2 x
案例4: (选做) 将一个整数数位翻转/ i( \/ P B, Q( r
如: 整数 56123 int i =56123%10=3
# ~) w& G# t- h7 c7 z int s=56123/10=5612
& O. }* q$ J; w4 q. |
) c' G+ `, c' u1 F. t. Y4 _. ?& ^3 H% D# S4 _: C9 m
返回结果为整数: 32165
8 K7 T% j7 I' `0 b/ D* M 提示: 使用 %10 获取最后一位
! `; X$ M0 V6 y$ w 使用 /10 去除处理完的最后一位/ k/ E9 g2 ~) F; d4 \9 R. y- k
# z/ x* ~( V/ r
|
|