do while 循环:先做一次循环,再判断条件。
注意:while语句后必须加分号
计算位数
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
int balance = 0;
Scanner in=new Scanner(System.in);
int number=in.nextInt();
int count=0;
do
{
number=number/10;
count++;
} while(number>0);
System.out.println(count);
}
}
计算平均数
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int number;
int sum=0;
int count=0;
number=in.nextInt();
while(number!=-1)
{
sum=sum+number;
count=count+1;
number=in.nextInt();
}
if(count>0)
{
System.out.println((double)sum/count);
}
}
}
do while
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int number=0;
int sum=0;
int count=0;
do
{
number=in.nextInt();
if(number!=-1)
{
sum=sum+number;
count=count+1;
}
} while(number!=-1);
if(count>0)
{
System.out.println((double)sum/count);
}
}
}
猜数游戏
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int number=(int)(Math.random()*100+1);
//math.random生成[0,1)
//math.random*100==>[0,100)
//math.random*100+1==>[1,101)==>[1,100]
//math.random()是浮点数,要做类型转换
int _input;//用户输入的数字
int count=0;//记录用户猜了几次
do
{
_input=in.nextInt();
count++;
if(_input>number)
System.out.println("大");
else if(_input<number)
System.out.println("小");
} while(_input!=number);
System.out.println(count);
}
}
三位数的数位分离
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
//先不考虑while还是do while,先考虑循环里的东西。
int number=in.nextInt();
do {
int digit=number%10;
System.out.print(digit+" ");
number=number/10;
} while(number>0);
System.out.println();//输出空行
}
}
for 循环
阶乘:
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int n=in.nextInt();
int i=1;//中间变量
int factor=1;
while(i<=n)
{
factor=factor*i;
i++;
}
System.out.println(factor);
}
}
结果:输入20的时候是一个负值。
int的范围:[ -231,231-1 ]
20 ! 大于int的范围
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int n=in.nextInt();
int factor=1;
for(int i=1/*初始化*/;i<=n/*循环执行的条件*/;i++/*循环体*/)//这样定义i只存在for循坏内部
{
factor=factor*i;
}
System.out.println(factor);
}
}
for循环:
for(初始动作;条件:每轮的动作)
{
for中的每一个表达式都是可以省略的
}
for(;条件;)=while(条件)
空循环:for(初始动作;条件:每轮的动作);
Tips for loops
- 有固定次数:for
- 必须执行一次:do while
- 其他情况
复合赋值
a+=1;等价于a=a+1;
a-=1;等价于a=-1;
a*=1;等价于a=a*1;
a/=1;等价于a=a/1;
a*=b+1;等价于a=a*(b+1);
a/=b+1;等价于a=a/(b+1);
i++;先赋值后加一
++i;先加一后赋值
素数
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int n=in.nextInt();
int isPrime=1;
for(int i=3;i<n;i++)
{
if(n%i==0)
{
isPrime=0;
System.out.println(n+"不是素数");
break;
}
}
if(isPrime==1)
{
System.out.println(n+"是素数");
}
}
}
break:跳出循环
countinue:跳出本次循环
System.out.println();//每次输出后都换行
System.out.print();//每次输出后不换行
循环嵌套
输出100以内的素数
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
for(int n=2;n<100;n++)
{
int isPrime=1;
for(int i=2;i<n;i++)
{
if(n%i==0)
{
isPrime=0;
break;
}
}
if(isPrime==1)
{
System.out.print(n+" ");
}
}
}
}
组合
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int amount=in.nextInt();
for(int one=0;one<=amount;++one) {
for(int five=0;five<=amount/5;++five) {
for(int ten=0;ten<=amount/10;++ten) {
for(int twenty=0;twenty<=amount/20;++twenty) {
if(one+five*5+ten*10+twenty*20==amount) {
System.out.println(one+"张1一元"+five+"张5元"+ten+"张10元"+twenty+"张20元");
}
}
}
}
}
}
}
标号:循环外添加一个标号,和里面的循环对应,可以直接break那几层循环或countinue,这个“标号”是c语言里没有的。这个“标号”的名字是可以自己随便写的
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int amount=in.nextInt();
OUT://标号
for(int one=0;one<=amount;++one) {
for(int five=0;five<=amount/5;++five) {
for(int ten=0;ten<=amount/10;++ten) {
for(int twenty=0;twenty<=amount/20;++twenty) {
if(one+five*5+ten*10+twenty*20==amount) {
System.out.println(one+"张1一元"+five+"张5元"+ten+"张10元"+twenty+"张20元");
break OUT;//标号
}
}
}
}
}
}
}