一:循环结构
while语句:
格式:while(条件表达式) //while:先判断条件,只有条件满足才执行循环体。do while: 先执行循环体,在判断条件,条件满足,再继续执行循环体。
{执行语句;}
do while语句:
do
{执行语句;}
while(条件表达式);//特点:条件无论是否满足,循环体至少被执行一次。
for语句
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;
}
*思考:什么时候用循环结构:当要对某些语句执行很多次时,就使用循环结构。
*小例子注意事项:无限循环的最简单表现形式。
for( ;;){ }
while(true) { }
二:具体事例
1:,1~100之间 7的倍数的个数。并打印。(提示:用到计数器思想)
要求:拿到问题时, 首先分析问题,严格按照要求书写格式即思路,步骤(改进,多种方法等内容-可选)
思路:
1),先对1~100进行遍历。
2),遍历是注意定义初试条件。只对7的倍数进行操作。
3),因为7的倍数不确定,只要符合条件,就通过一个变量来记录住这个变化的次数。
步骤:
1),定义循环语句,选择for语句。
2),在循环中定义判断。只要是7的倍数即可。使用if语句。条件:7的倍数 x%7==0;
3),定义变量,该变量随着7的倍数的出现而自增。
class ForTest3
{
public static void main(String[] args)
{
int count = 0;
for(int x=1; x<=100; x++)
{
if(x%7==0)
//System.out.println("x="+x);
count++;
}
System.out.println("count="+count);
}
}
2大圈套小圈思想
*****
****
***
**
*
发现图形有很多行,每一个行有很多列。
要使用嵌套循环。原理:形象说法:大圈套小圈。
class ForForDemo
{
public static void main(String[] args)
{
for(int x=0; x<3; x++)//
{
for(int y=0; y<4; y++)
{
System.out.print("*");
}
System.out.println();//只有一个功能就是换行。
}
System.out.println("-------------------");
for (int x=0; x<5 ;x++ )//x<5:因为外循环控制行数。一共5行。
{
for (int y=x; y<5 ;y++)
{
System.out.print("*");
}
System.out.println();
//z++;
}
}
}
3:编写程序,判断给定的某个年份是否是闰年。
闰年的判断规则如下:
(1)若某个年份能被4整除但不能被100整除,则是闰年。
(2)若某个年份能被400整除,则也是闰年。
import java.util.Scanner;
class Bissextile
{
public static void main(String[] args)
{
System.out.print("请输入年份");
int year; //定义输入的年份名字为“year”
Scanner scanner = new Scanner(System.in);
year = scanner.nextInt();
if (year<0||year>3000)
{
System.out.println("年份有误,程序退出!");
System.exit(0);
}
if ((year%4==0)&&(year%100!=0)||(year%400==0))
System.out.println(year+" is bissextile");
else
System.out.println(year+" is not bissextile ");
}
}
4:编写程序求 1+3+5+7+……+99 的和值。
class he
{
public static void main(String[] args)
{
int number = 1; //初始值1,以后再+2递增上去
int sum = 0;
for ( ; number <100; number+=2 ) { sum += number; }
System.out.println("1+3+5+7+……+99= " +sum);
}
}
5:利用for循环打印 9*9 表?
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
//循环嵌套,打印九九乘法表
public class NineNine
{
public static void main(String[]args)
{
System.out.println();
for (int j=1;j<10;j++)
{
for(int k=1;k<10;k++)
{
//老师的做法,判断语句里的 k<=j,省去下列的if语句。
if (k>j) break; //此处用 continue也可以,只是效率低一点
System.out.print(" "+k+"X"+j+"="+j*k);
}
System.out.println();
}
}
}
*分析以上几个小例子可知:很多程序是想通的,我们要从中学会找到其中的规律,不能死记代码(但得多敲)。
三两个特殊语句:break,continue
class OtherDemo
{
public static void main(String[] args)
{
//break:
w:for(int x=0; x<3; x++)
{
for(int y=0; y<4; y++)
{
System.out.println("x="+x);
break w;
}
}
//continue:只能作用于循环结构。继续循环。特点:结束本次循环,继续下一次循环。
for(int x=1; x<=10; x++)
{
if(x%2==1)
continue;
System.out.println("x="+x);
}
w:for(int x=0; x<3; x++)
{
for(int y=0; y<4; y++)
{
System.out.println("x="+x);
continue w;
}
}
*记住:
1,break和continue语句作用的范围。
2,break和continue单独存在时,下面可以有任何语句。因为都执行不到。
3,这两个语句不能离开应用范围。
4,这个两个语句单独存在下面都不可以有语句。
5,continue语句是结束本次循环继续下次循环。
6,标号的出现,可以让这两个语句作用于指定的范围。
四:函数
函数的定义:等同于方法
函数的特点:1:对代码进行封装;2:便于复用;3:只有调用才执行;4:提高复用性;
函数的应用:两个明确:1:明确功能后结果是什么;2是否有未知书参与运算。
函数的重载:在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
小例子:
(1)、求 a+aa+aaa+.......+aaaaaaaaa=?
其中a为1至9之中的一个数,项数也要可以指定。
import java.util.Scanner;
class Multinomial
{
public static void main(String[] args)
{
int a; //定义输入的 a
int howMany; //定义最后的一项有多少个数字
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个 1~9 的 a 值");
a = scanner.nextInt();
System.out.println("请问要相加多少项?");
howMany = scanner.nextInt();
int sum=0;
int a1=a; // 用来保存 a 的初始值
for (int i=1; i<=howMany; i++)
{
sum+= a;
a = 10*a +a1; // 这表示a 的下一项
// 每次 a 的下一项都等于前一项*10,再加上刚输入时的 a ;注意,这时的 a 已经变化了。
}
System.out.println("sum="+sum);
}
}
(2):求 2/1+3/2+5/3+8/5+13/8.....前20项之和?
class Sum{
public static void main(Sting[] args){
double sum=0;
double fenZi=2.0, fenMu=1.0; //初始的分子 (fenZi)=2,分母(fenMu)=1
for(int i=1; i<=20; i++){
sum += fenZi / fenMu ;
fenMu = fenZi; //下一项的分母 = 上一项的分子
fenZi += fenMu; //下一项的分子 = 上一项的分子加分母
}
System.out.println("sum= "sum);
}
}
(3)
利用程序输出如下图形:
*
* * *
* * * * *
* * * * * * *
* * * * *
* * *
*
class Asterisk //星号*
{
public static void main(String[] args)
{
for (int i=1; i<=13; i+=2)
{
for(int j=1; j<=i && i+j<= 14; j++)
{
System.out.print("* ");
}
System.out.println(); // 换行
}
}
}
(4):计算圆周率
PI=4-4/3+4/5-4/7.......
打印出第一个大于 3.1415小于 3.1416的值
class Pi {
public static void main(String[] args){
double pi =0; //定义初始值
double fenZi = 4; //分子为4
double fenMu = 1; //第一个4,可看作分母为1 的分式,以后的分母每次递增2
for (int i = 0; i < 1000000000; i++){ //运行老久,减少循环次数会快很多,只是精确度小些
pi += (fenZi/fenMu) ;
fenZi *= -1.0; //每项分子的变化是+4,-4,+4,-4 ....
fenMu += 2.0; //分母的变化是1,3,5,7, .... 每项递加2
}
System.out.println(pi);
}
}
输出结果为pi = 3.1415926525880504,应该不精确 |
|