while循环:
四要素:
循环初始化
循环条件
循环体
迭代条件
/*
一、while循环四要素:
循环初始化
循环条件
循环体
迭代条件
二、while循环的结构:
①
while(②){
③;
④;
}
说明:while循环千万不要丢了迭代条件,一旦丢了就导致死循环!
写程序要避免死循环
《for循环和while循环是可以相互转换的》!
区别:for循环和while循环的初始化条件部分作用域不同。
*/
class WhileTest {
public static void main(String[] args) {
int i = 1;
while(i <= 10){
System.out.println(1);
i ++;
}
}
}
do-while:
/*
一、do-while循环四要素:
循环初始化
循环条件
循环体
迭代条件
二、do-while循环的结构:
①;
do{
③;
④;
}while(②);
执行过程:①-③-④-②
说明:
1.do-while至少会执行一次循环体!
2.开发中使用for和while更多一些,do-while较少。
*/
class DoWhileTest {
public static void main(String[] args) {
int i = 1;
do{
if(i % 2 == 0){
System.out.println(i);
i++;
}
}while(i <= 10);
}
}
综合题目:
/*
从键盘输入个数不确定的整数,并记录正数和负数的个数,输入为0时结束。
*/
/*
1.不在循环条件部分限制次数的结构:for(;;)或者while(true)
2.结束循环的方式:
Ⅰ:循环条件返回false
Ⅱ:循环体中执行break
*/
import java.util.Scanner;
class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int positiveNum = 0;
int negativeNum = 0;
while(true){ // for(;;){
int i = scan.nextInt();
if(i == 0){
break;
}
if(i < 0){
negativeNum += 1;
}else{
positiveNum += 1;
}
}
System.out.println("负数个数:" + negativeNum);
System.out.println("正数个数:" + positiveNum);
}
}
嵌套循环:
/*
嵌套循环的使用
1.嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环
2.
外层循环:循环结构B
内层循环:循环结构A
3.说明:
内层结构的循环体遍历一遍,外层执行一次
假设外层需要执行m次,内层需要执行n次,共执行m*n次。
4.技巧:外层循环控制行数,内容控制列数。
*/
class ForForTest {
public static void main(String[] args) {
for(int i = 1;i <= 4;i++){
for(int j = 1;j <= (5 - i);j++){
System.out.print("*");
}
System.out.println();
}
}
}
嵌套循环:九九乘法表和输出一百以内的质数:
/*
输出99乘法表
*/
class NineNineTest {
public static void main(String[] args) {
for(int i = 1;i <= 9;i++){
for(int j = 1;j <= i;j++){
System.out.print(j + "*" + i + "=" + i * j);
System.out.print('\t');
}
System.out.println();
}
System.out.println("Hello World!");
}
}
/*
输出100以内的质数(素数,只能被1和本身整除)
*/
/*
class ZhiShuTest{
public static void main(String[] args){
int i = 1;
while(i <= 100){
int num = 0;
for(int j = 2;j <= i - 1;j++){
if(i % j == 0){
num++;
}
}
if(num == 0){
System.out.println(i);
}
i++;
}
}
}
/*
class ZhiShuTest{
public static void main(String[] args){
int i = 1;
while(i <= 100){
boolean isFlag = true;//一个旗帜,表明是不是进入了if
int num = 0;
for(int j = 2;j < i;j++){
if(i % j == 0){
isFlag = false;
break;
}
}
if(isFlag == true){
System.out.println(i);
}
i++;
}
}
}
*/
class ZhiShuTest{
public static void main(String[] args){
long start = System.currentTimeMillis();
int i = 1;
while(i <= 100){
boolean isFlag = true;//一个旗帜,表明是不是进入了if
int num = 0;
//优化2:对本身是质数的自然数是有效的,其实非质数也有效,只不过是优化一已经生效了
for(int j = 2;j <= Math.sqrt(i);j++){
if(i % j == 0){
isFlag = false;
break;//优化1:只对本身非质数的自然数有效
}
}
if(isFlag == true){
System.out.println(i);//优化3:每次输出影响了输出的效率,直接计算总数就可以了
}
i++;
}
long end = System.currentTimeMillis();
long time = end - start;
System.out.println(time);
}
}
使用continue:
class ZhiShuTest{
public static void main(String[] args){
long start = System.currentTimeMillis();
int i = 1;
label: while(i <= 100){
for(int j = 2;j <= Math.sqrt(i);j++){
if(i % j == 0){
continue label;
}
}
i++;
}
long end = System.currentTimeMillis();
long time = end - start;
System.out.println(time);
}
}