1.循环语句
public static void main(String[] args) {
int balance=0;
int need=0;
while(true) {
System.out.print("请投币:");
Scanner in=new Scanner(System.in);
int amount=in.nextInt();
balance=balance+amount;
if(balance>=10) {
//打印车票
System.out.println("***********************");
System.out.println("*Java城际铁路专线*");
System.out.println("*无指定座位票*");
System.out.println("*票价10元*");
System.out.println("***********************");
//找零
System.out.println("找零"+(balance-10));
balance=0;
}
else {
need=10-balance;
System.out.println("还差"+need+"元");
}
}
}
上面的程序是一个永动机,即永远不会停止除非有其他因素干预,那么如何让这个循环停止呢?比如说我们要数一个数的位数,比如234,用程序应该怎么做呢?看下面的代码。
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int number=in.nextInt();
int amount=0;
while(number>0)
{
number=number/10;
amount=amount+1;
}
System.out.println(amount);
}
while 与 if是有关系的,可以说while拥有if的判断功能再加上循环。
那么问题又来了,上面这个程序输入0时,输出为0,显然是错误的。这是因为while语句是先判断再进入循环体,这时候就需要另外一个语句–do—while。
public class xunhuan1 {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int number=in.nextInt();
int amount=0;
do
{
number=number/10;
amount=amount+1;
}while(number>0);
System.out.println(amount);
}
2.计数循环
求平均值(两种方法)
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入要求平均数的数字,输入-1结束:");
// int number=in.nextInt();
int count=0;
int sum=0;
int number;
// while(number!=-1) {
// sum=sum+number;
// count+=1;
// number=in.nextInt();
// }
do {
number=in.nextInt();
if(number!=-1) {
sum=sum+number;
count+=1;
}
}while(number!=-1);
if(count>0) {
System.out.println("平均值为:"+(double)sum/count);
}
}
DAY5.续上一天
3.猜数字游戏
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int number=(int)(Math.random()*100+1);
// 生成一个1~100的随机数
int amount=0;
int a;
do {
a=in.nextInt();
amount=amount+1;
if(a>number) {
System.out.println("偏大");
}
else if(a<number) {
System.out.println("偏小");
}
}while(a!=number);
System.out.println("恭喜您猜对了,您一共猜了"+amount+"次");
}
本段代码学到了如何生成随机数Math.random生成的是大于等于0小于1的随机数,通过调整得到程序中注释的结果。
4.如何将352倒着写成253
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int number=in.nextInt();
do
{
int digit=number%10;
System.out.print(digit);
number=number/10;
}while(number>0);
}
有一个问题,如果只是倒序还好,700变为007;但是如果是700要求倒过来变成7要怎么做呢?
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int number=in.nextInt();
int amount=0;
do
{
int digit=number%10;
System.out.print(digit);
amount=amount*10+digit;
number=number/10;
}while(number>0);
System.out.println();
System.out.println(amount);
}
只需引入新变量amount,做*10+digit运算即可。
5.for循环
如何求10的阶乘,两种方法
public static void main(String[]args){
int factor=1;
// int i=1;
// while(i<=10) {
// factor=factor*i;
// i=i+1;
// }
for(int i=1;i<=10;i++) {
factor=factor*i;
}
System.out.println(factor);
}
注意:三中循环的用法
①如果有固定次数,用for
②如果必须执行一次用do_while
③其他情况用while
6.循环控制
判断一个数是否为素数
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int number=in.nextInt();
int isPrim=1;
for(int i=2;i<number;i++) {
if(number%i==0) {
System.out.println(number+"不是素数,i="+i);
isPrim=0;
break;
}
}
if(isPrim==1) {
System.out.println(number+"是素数");
}
else {
System.out.println(number+"不是素数");
}
}
注意代码中的break,当输入14时输出为:
14不是素数,i=2
14不是素数。
与break对应的还有continue,continue的作用为跳出本次循环开启下一次循环。
7.多重循环
1)寻找100以内的素数
public static void main(String[] args) {
// Scanner in=new Scanner(System.in);
// int number=in.nextInt();
for(int number=2;number<=100;number++) {
int isPrim=1;
for(int i=2;i<number;i++) {
if(number%i==0) {
// System.out.println(number+"不是素数,i="+i);
isPrim=0;
break;
}
}
if(isPrim==1) {
System.out.print(number+" ");
}
else {
// System.out.println(number+"不是素数");
}
}
}
2)前50个素数
public static void main(String[] args) {
// Scanner in=new Scanner(System.in);
// int number=in.nextInt();
int a=0;
for(int number=1;;number++) {
int isPrim=1;
for(int i=2;i<number;i++) {
if(number%i==0) {
// System.out.println(number+"不是素数,i="+i);
isPrim=0;
break;
}
}
if(isPrim==1) {
System.out.print(number+" ");
a++;
if(a==50) {
break;
}
}
else {
// System.out.println(number+"不是素数");
}
}
}
3)多重循环的跳出
用1角2角5角凑10元,只需要一种方即可,穷举。
public static void main(String[] args) {
OUT:
for(int a=0;a<=100/1;a++) {
for(int b=0;b<=100/2;b++) {
for(int c=0;c<=100/5;c++) {
if(a*1+b*2+c*3==100) {
System.out.println("需要"+a+"张1角,"+b+"两角,"+c+"五角");
break OUT;
}
}
}
}
}
注意OUT是自己定义的循环标题。