前言:通过java基础(一)的学习基本上java的基本框架和基本命名差不多已经掌握,以及简单的基本逻辑运算,接下来我们开始对一些循环和调用进行一些研究与掌握,反正不论怎样,java这门语言要不断地敲打代码,一有时间就敲,正所谓熟能生巧。希望我的方法能对java的学习有所帮助。
循环语句之while循环!!!!!!重点
格式:
基本格式:
while(条件表达式){
循环语句体;
}
扩展格式:(优于基本格式)
初始化语句 ;
while(条件表达式){
循环体语句;
步长语句;
}
执行流程:
1)初始化语句对变量进行赋值,如果满足条件表达式,那么执行循环体语句,执行步长语句
2)继续判断是否满足条件
3) 满足条件,继续执行循环体语句,步长语句---->当满足不足条件为止结束
while循环和for循环的区别?
1)如果从内存角度考虑,for循环要优于while循环,for循环语句执行完毕之后,变量会及时被GC垃圾回收期回收掉
while循环,它可以去访问循环语句中的变量
2)根据具体需求具体分析,
如果循环次数明确的情况下,应用for循环
如果不知道要循环多少次,应该去使用while循环
需求:while的练习。
public class WhileDemo2 {
public static void main(String[] args) {
int j = 1 ;
while(j<=5) {
System.out.println("我爱靳东");
j ++ ;
}
System.out.println("j:"+j);
}
}
循环语句结构do-whle的第三种:
基本格式do{
循环体语句
}whiel(判断条件语句) ;
扩展格式:
初始化语句;
do{
循环体语句;
控制体语句;(步长语句)
}while(条件判断语句) ;
循环结构语句
for循环,while循环,do-while循环,他们之间的区别?
do-while和前两者之间最大的区别:
循环体语句至少执行一次
实际开发:优先考虑 for循环,其次while循环,最后,do-while
需求:do-while的练习:
public class DoWhileDemo2 {
public static void main(String[] args) {
do {
System.out.println("我们爱Java...."); //循环体语句至少执行一次
j++ ;
}while(j<=5) ;
}
}
switch语句的格式:重点
switch(表达式){
case 值1:
语句1; break ;
case 值2:
语句2; break;
case 值3:
语句3; break;
....
default:
语句n+1; break;
}
执行流程:
case语句中的值1和表达式中的值比较,如果一致,执行语句1
如果不一致,走case 值2,再进行比较,如果椅子,执行语句2
....
如果上述都不一致,执行default中的语句
格式的解释:
switch:当前是一个选择结构语句,它的作用和if语句是一样
case语句:它后面的值是和表达式进行比较
break:表示结束当前switch语句
default:是和if语句中的else意识时候一样的,如果条件都不成立,执行default中的语句
面试题:
byte可以用在switch语句的表达式?
* long可以作为switch语句的表达式?
* String可以作为switch语句的表达式?
面试题答案: switch语句后面的表达式:能跟的类型:byte,short,int,charjdk5以后,可以跟枚举
jdk7以后,可以String类型
switch练习加前面的键盘录入训练
需求:键盘录入数据,
如果是1,输出星期一
如果是2,输出星期二
....
如果是7,输出星期日
注意:
写代码: 关联不大的逻辑中间用空行隔开
public class SwitchDemo {
public static void main(String[] args) {
//1)创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//2)接收数据
System.out.println("请输入一个数据:");
int week = sc.nextInt() ;
//使用switch语句
switch(week) {
case 1:
System.out.println("星期一");break ;
case 2:
System.out.println("星期二");break ;
case 3:
System.out.println("星期三");break ;
case 4:
System.out.println("星期四");break ;
case 5:
System.out.println("星期五");break ;
case 6:
System.out.println("星期六");break ;
case 7:
System.out.println("星期日");break ;
default:
System.out.println("您输入了非法数据...");break ;
}
}
}
关于switch语句中的注意事项:
1)case语句的后面只能跟常量(根据具体的需求),不能跟变量! javascript中的case后面是可以跟变量并且还可以表达式
2)default语句可以在switch语句中的任何位置,不影响代码执行,如果是在语句中,那么break最好带上
3)建议把break带上,否则会造成一个现象:case穿透!
switch语句的结束条件:
1)语句break语句结束
2)执行默认执行到末尾语句结束
5)case语句的后面是冒号,表示和switch语句中的表达式进行比较
6)跳转控制语句: break,continue,retrun (后面讲)
for循环嵌套:
for(){
*for(){
}
}
一.需求:在控制台输出4行5列的 *
*****
*****
*****
*****
public class ForForDemo {
public static void main(String[] args) {
//最原始的做法:
System.out.println("*****");
System.out.println("*****");
System.out.println("*****");
System.out.println("*****");
System.out.println("-------------------------");
//优化改进:
//第一行
//每一行是5个*,for遍历将5个*打印出来
for(int x = 1 ; x <=5 ; x ++) {
System.out.print("*"); //让*处于同一行ln去掉
}
System.out.println();
//第二行:
//每一行是5个*,for遍历将5个*打印出来
for(int x = 1 ; x <=5 ; x ++) {
System.out.print("*"); //让*处于同一行ln去掉
}
System.out.println();
//第三行:
//每一行是5个*,for遍历将5个*打印出来
for(int x = 1 ; x <=5 ; x ++) {
System.out.print("*"); //让*处于同一行ln去掉
}
System.out.println();
//第四行:
//每一行是5个*,for遍历将5个*打印出来
for(int x = 1 ; x <=5 ; x ++) {
System.out.print("*"); //让*处于同一行ln去掉
}
System.out.println();
System.out.println("-------------------------");
//在进行改进:重复度高,优化
for(int x = 0 ; x <4; x ++) {//控制行数
for(int y = 0 ;y<5; y ++) {//控制列数
System.out.print("*");
}
System.out.println(); //换行
}
}
}
二.需求:请输出下列的形状
*
**
***
****
*****
public class ForForDemo2 {
public static void main(String[] args) {
//先输出 5行5列的*
for(int x = 0 ; x <5 ; x ++) {//行
for(int y = 0 ; y < 5 ; y++) {//列
System.out.print("*");
}
System.out.println();
}
System.out.println("-------------------------");
//5行5列可以实现,现在需求,列数在发生变化
//第一行 1列 y = 0 ; y<=0 ;y++
//第二行 2列 y = 0 ; y <=1 ; y++
//第三行 3列 y = 0 ; y <=2 ; y ++
//第四行 4列 y = 0 ; y <= 3 ; y ++
//第五行 5列 y = 0 ; y <=4 ; y ++
//看规律:列数的变量刚好能去到 x的值=0,1,2,3,4
for(int x = 0 ; x < 5 ; x ++) {//行
for(int y = 0 ;y<=x ; y++) {//列
System.out.print("*");
}
System.out.println();
}
}
}
需求:99乘法表
1*1 =1;
1*2 = 2; 2*2 = 4
1*3 = 3 ;2*3 = 6
1*4 = 4 ;2*4 = 8 ......
...
public class ForForDemo3 {
public static void main(String[] args) {
//for循环嵌套,完成*形状
for(int x = 0 ; x <9 ; x ++) {//行数
for(int y = 0 ; y <=x ; y++) {//列
System.out.print("*");
}
System.out.println();
}
System.out.println("------------------------------");
//为了保证使用数据,从1开始
for(int x = 1 ; x <= 9 ; x ++) {//行数
for(int y = 1 ; y <=x ; y ++) {//列数
System.out.print(y+"*"+x+"="+(y*x)+"\t");
}
System.out.println();
}
}
}
正则表达表达式
转义字符:
x字符,x代表任意字符
'\t' 制表符
'r' 回车符
'\n' 换行
continue:继续的意思,跳出当前循环,直接进入一次循环
continue:单独是不能使用的,在循环语句中使用多
跳转控制语句:
retrun :方法的返回值 ,会带回一个结果
面试题:
break和continue的区别?
笔试题
for(int x=1; x<=10; x++) {
if(x%3==0) {
//在此处填写代码
}
System.out.println(“Java基础班”);
}
我想在控制台输出2次:“Java基础班“
break;
我想在控制台输出7次:“Java基础班“
continue;
我想在控制台输出13次:“Java基础班“
System.out.println(“Java基础班”);
用循环的方法来完成一些问题:
一.需求:1~10之间的和
分析: 0 + 1 = 1;1 + 2 = 3 ;3 + 3 = 6 ;6 + 4 = 10 ;10 + 5 = 15 .....
求和思想:
1)最终结果变量
2)for循环去完成
定义两个加数
第一个加数用来记录之前数据的所有的和
第二个加数,它的值在变化(1,2,3,4,5...10)
二.在控制台输出所有的"水仙花数"
分析:
完成这个需求,需要知道什么是"水仙花数"
水仙花数:三位数:每个位上的数据的立方和=数据本身
153 = 1*1*1+5*5*5+3*3*3 = 1 + 125 + 27
1)水仙花指的是三位数,告诉我们一个范围,for循环控制范围
2)如何获取每个位上的数据
举例:
个位:153%10 3
十位:153/10%10 5
百位:153/10/10 %10 1
获取到了每个位上的数据
3)满足条件:假设当前变量和ge*ge*ge+shi*shi*shi+bai*bai*bai 进行比较,如果相同的话,就可以输出这个数据
package org.westos_constant;
public class shuixianha {
/**水仙花数:三位数:每个位上的数据的立方和=数据本身
* 153 = 1*1*1+5*5*5+3*3*3 = 1 + 125 + 27
*
* @param args
*/
public static void main(String[] args) {
int count=0;
for(int i=100;i<=999;i++) {
int ge=i%10;
int shi=i/10%10;
int bai=i/10/10%10;
if(i==(ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
count++;
System.out.println("水仙花数分别是:"+i);
}
}
System.out.println("水仙花的个数是:"+count);
}
}
三.再输出台输出满足如下条件的五位数
十位等于千位
各位等于万位
个位+十位+千位+万位=百位
分析:
5位数告诉一个范围
获取每一个位数数据
针对条件进行判断
输出
public class ForTest3 {
public static void main(String[] args) {
//5位数告诉一个范围
for(int x = 10000; x <=99999; x ++) {
// 获取每一个位数数据
int ge = x %10 ;
int shi = x /10 %10;
int bai = x /10/10 %10 ;
int qian = x /10/10/10 %10 ;
int wan = x /10/10/10/10 %10 ;
// 针对条件进行判断
//个位+十位+千位+万位=百位
if((ge==wan) && (shi==qian) &&(ge+shi+qian+wan==bai)) {
System.out.println("满足条件的五位数是:"+x);
}
}
}
}
函数方法概念:完成特定功能的代码块
方法的格式: 形式参数
public static 返回值 方法名(参数类型1 变量1,参数类型2 变量名){
return ...
}
方法格式的解释:
public static:方法是静态的,并且是公共的方法 (今天写方法,public static)
返回值(数据类型): 根据具体的需求,返回什么类型,用什么样的数据类型结束
方法名:给当前代码块起名字,命名规则:单个单词:字母全小写 多个单词:第一个单词全部小写,第二个单词开始每个单词首字母大写
return: 将当前代码的计算的结果,返回给调用者
有返回值类型的方法:
方法调用:
1)单独调用
单独调用,没有意义,没有输出结果
2)输出调用
直接输出了结果,写死了,不能对结果进行操作
3)赋值调用 :有返回值类型的方法,推荐使用赋值调用,它可以对结果进一步操作
int result = sum(a,b) ;
一.需求:计算两个数据的和
求两个数据之和的方法
不知道求和是几个数据--->分别定了三个方法,方法名不一样,输出没有问题
命名规则:起名字-->见名知意
Java就给提供一个专业名词:给多个方法起同一个名字,还不报错---->方法重载 (面向对象:继承中讲方法重写)
方法重载:指的是方法名相同,参数不同,返回值没有关系
参数不同:
1)参数个数不同
2)参数类型不同
定义一个方法:
两个明确:
1)明确返回值类型
2)明确有几个参数,参数分别是什么类型
@param a
@param b
@return 返回一个求和 的结果
*/
public static int sum(int a,int b) {
//定义变量
// int c = a + b ;
// return c ;
return a+b ;
}
定义一个方法的注意事项:
1)方法和方法是平级关系,一个方法中不能再定义个方法
2)定义一个方法 时候,形式参数必须有数据类型,否则有问题
3)在主main()中,调用方法的时候,实际参数中不需要带数据类型的
4)有大括号的地方,不能有分号,有分号的地方不能有大括号