JAVA基础必备(四)——循环体(一)

本文介绍Java中的循环结构应用,包括如何使用循环打印图形、计算数值等。通过具体实例讲解for循环、while循环的使用方法,并演示如何通过循环解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个循环(一)主要讲解下如何利用循环打印图形,下面是正文——

1.通过键盘输入数据:

a)import java.util.Scanner包;
b)在主函数中Scanner s = new Scanner(System.in);
c)s.nextInt(),or  s.nextDouble();

2.选择结构:

a)if(条件){//语句,如果只有一个语句{}可省略}
b)if(){}else if(){}...
c)switch(变量){case...常量 default:}注意:1.break关键字如果没有break,匹配上一个之后会默认往后匹配直到有break为止;break switch{}继续后面的语句;2.default语句最多只能出现一次,可以没有。可以出现任何的位置(和case并列即可)其作用相当于else。。。3.switch小括号中的变量类型,只能是如下类型:byte、short、int、char、枚举(不是基本数据类型)

3.循环结构:

for(表达式1;表达式2;表达式3)
  {
    //循环体
  }
break  跳出for循环 --->for结构结束
   contiune 结束本次循环进行下一次---》去第三个表达式;
练习:形成for循环思想
package xunhuanti;

import java.util.Scanner;

public class Shuru {

	private  int s,a,b,c;
	private int sum = 0;
	private  Scanner sc;
	
	/**
	 * @param args
	 * 输入一个年龄,如果大于60则输出可以免费进入
	 */
	   private  void age(){
				   sc = new Scanner(System.in);
				   System.out.println("请输入年龄:");
				   s = sc.nextInt();
				   while(s<=60){
				   System.out.println("年龄不够免费条件!请重新输入:");
				   s = sc.nextInt();
			   }
			   System.out.println("可以免费进入");
	       }
	   /**
	    * 通过键盘输入三个数字,找出其中的最大值
	    */
	   private  void threeMax(){
		   sc = new Scanner(System.in);
		   System.out.println("请输入第一个数字:");
		   a = sc.nextInt();
		   System.out.println("请输入第二个数字:");
		   b = sc.nextInt();
		   System.out.println("请输入第三个数字:");
		   c = sc.nextInt();
		   if(a>b){
			   s = b;
			   b = a;
			   a = s;
		   }
		   if(a>c){
			   s = c;
			   c = a;
			   a = s;
		   }
		   if(b>c){
			   s = c;
			   c = b;
			   b = s;
		   }
		   System.out.println(a+"/"+b+"/"+c);
	   }
	   /**
	    * 通过键盘输入年月日,
     计算该日期在这一年已经过了多少天
	    */
	   public   void day(){
		   sc = new Scanner(System.in);
		   System.out.println("请输入年:");
		   a = sc.nextInt();
		   System.out.println("请输入月:");
		   b = sc.nextInt();
		   System.out.println("请输入日:");
		   c = sc.nextInt();
//		   过了多少天其实本质就是叠加和
//		   那么以月为变量进行统计,当月不算,过去的月数天数+当月的天数
		   switch(b-1){
//		   若b当月为12月份,则b-1=11月份
		   case 11:
			   sum += 30;
		   case 10:
			   sum += 31;
		   case 9:
			   sum += 30;
		   case 8:
			   sum += 31;
		   case 7:
			   sum += 31;
		   case 6:
			   sum += 30;
		   case 5:
			   sum += 31;
		   case 4:
			   sum += 30;
		   case 3:
			   sum += 31;
		   case 2:
			   if(a%4==0&&a%100!=0||a%400==0){
				   sum += 29;
			   }else sum += 28;
		   case 1:
			   sum += 31;
		   }
		   sum += c;
		   System.out.println("这一年已经过了"+sum+"天!");
		   if(a%4==0&&a%100!=0||a%400==0){
			   s = 366;
		   }else s = 365;
		   System.out.print("这一年还剩下"+(s-sum)+"天");
	   }
	   /**
	    * 读入一个三位数,计算其各位数字之和。
例如:123各位数字之和为6
	    */
	   private  void threeNumSum_print(){
		   System.out.println("计算三位数各位数字之和,请输入要计算的三位数:");
		   sc = new Scanner(System.in);
		   s = sc.nextInt();
		   threeNumSum();
	   }
	   private  void threeNumSum(){
//		   既然要输入三位数,那么就不让输入超过三位数
		   if(s<100||s>999){
			   System.out.println("输入有误,请输入三位数:");
			   s = sc.nextInt();
			   threeNumSum();
		   }else {
			   int one = s%10;//个位数
			   int two = s/10%10;//十位数
			   int three = s/100;//百位数
		       s = one + two + three;
		       System.out.println("个位="+one+"十位="+two+"百位="+three+"该数个位之和:"+s);
		       System.out.println("请继续输入:");
		       s = sc.nextInt();
		       threeNumSum();
	   }
	   }
	   /**
	    * 1-100之和
	    */
	   private void sum100(){
		   for(int i=1;i<=100;i++){
			   sum += i;
		   }
		   System.out.println("1-100和="+sum);
	   }
	/**
	 * 求1-100偶数之和,
	 */
	   private void oushu(){
		   for(int i=1;i<=100;i++){
			  if( i%2==0){
				  sum += i;
			  }
		   }
		   System.out.println("偶数和:"+sum);
		   for(int i=2;i<=100;i+=2){
			   s += i;
		   }
		   System.out.println("另种方法的偶数和:"+s);
	   }
	   /**
	    * 求1到100之间能被3整数但不能被5整除的所有数字之和
	    * @param args
	    */
	   private void intThreeFive(){
		   for(int i=1;i<=100;i++){
			  if (i%3==0&&i%5!=0){
				  System.out.println(i);
				  sum += i;
			  }
		   }
		   System.out.println("sum="+sum);
	   }
	   /**
	    * 求1!+2!+3!+4!+...+10!
            n! = (n-1)!*n  最好用long型
	        10! = 1*2*3*4*..*10
	            第一循环 要求得1的阶乘 并累计为和
	            第二循环 得到2的阶乘  并累计为和
	             第三循环 得到3的阶乘  并累计为和
	            ...
	             第十循环 得到10的阶乘  并累计为和
	    * @param args
	    */
	   private void jieCeng(){
		   s= 1;
		   for(int i = 1;i<=10;i++){
			   s *= i;
			   sum += s;
		   }
		   System.out.println("10!sum="+sum);
	   }
	   /**
	    * 通过键盘输入一个数字,打印其所有因子
      并对所有因子求和(因子不包含自己)
      因子就是能被这个数整除的数字
      10的因子有 1 2 5 
	    * @param args
	    */
	   private void yinZi(){
		   sc = new Scanner(System.in);
		   System.out.println("请输入:");
		   s = sc.nextInt();
//		   一个数除以大于自己一半的数字肯定会有余数的,那么他的因子最大也就是s/2了,自然也就不包括自己了
		   for(int i = 1;i<=s/2;i++){
			   if(s%i==0){
			   sum += i;
			   System.out.println(s+"的因子为"+"("+i+")");
			   }
		   }
		  System.out.println("因子和="+sum);
	   }
	/**
	 * 通过键盘输入一个数字,判断该数字是否为素数
       指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数(不包括0)整除的数。
       拿到一个数字后就从2开始除一直除到n-1如果都有余数,
       说明该数字是素数  只要除到n/2即可
	 * @param args
	 */
	   private void suNum(){
		   sc = new Scanner(System.in);
		   System.out.println("请输入:");
		   s = sc.nextInt();
          for(int i=s-1;i>1;i--){
        	 if(s%i!=0){
        		 System.out.println(s+"为素数");
        	 }else System.out.println(s+"不为素数");
          }
	   }
	   /**
	    * 打印100-1000所有的素数
	    * @param args
	    */
	   private void printSuNum(){
		   int j;
		   for(int i=100;i<=1000;i++){
//			   我拿这个数一直除以2,除到这个数的一半就可以了,看效果
			   for( j=2;j<=i/2;j++){
				   if(i%j==0){
					   break;
				   }
				  }
			   System.out.println(j);
			   if(j>i/2){
			   System.out.println(i);
			   }
			   }
		   }
	   /**
	    *  *
 **
 ***
 ****
 *****通过键盘输入行数
 打印图形有行有列,就是两层循环
 外层循环控制行,内层循环控制列
 打印九九乘法表!
	    * @param args
	    */
	   private void jiujiu(){
		   for(int i = 1;i<=9;i++){
			   for(int j = 1;j<=i;j++){
				   System.out.print(j+"*"+i+"\t\t");
			   }
			   System.out.println();
		   }
	   }
	   /** 
********
 *******
  ******
   *****
    ****
     ***
      **
       *   打印图形的习惯--》上面宽外层循环从大开始
每行都有若干个空格和若干个星号组成,
需要有一个循环来控制空格,还要有一个循环控制星号
内层循环的控制一定和外层循环是相关的
	    * @param args
	    */
	   private void bigTu(){
		   for(int i = 10;i>=1;i--){//控制行
			   for(int j=1;j<=10-i;j++){//控制列
				   System.out.print(" ");
			   }
			   for(int k=1;k<=i;k++){
				   System.out.print("*");
			   }
			   System.out.println();
		   }
	   }
/*	     *
	   ***
	  *****
	*******
   *********
	 *******
	  *****
	   ***
	     *
*/
	   private void duichen(){
		   for(int i = 1;i<=5;i++){
//			  先打印上半部分
			   for(int j=1;j<=5-i;j++){ //控制空格的输出,刨除需要输出*的位置
				   System.out.print(" ");
			   }
			   for(int k = 1;k<=2*i-1;k++){//什么位置需要输出*呢?
				   System.out.print("*");
			   }
			   System.out.println();
		   }
		   for(int m=4;m>=1;m--){
			   for(int g=1;g<=5-m;g++){
				   System.out.print(" ");
			   }
			   for(int n=1;n<=2*m-1;n++){
			   System.out.print("*");
			   }
			   System.out.println();
		   }
	   }
	   /**
 	 A
   BBB
 CCCCC
DDDDDDD
EEEEEEEEE
	    * @param args
	    */
	   private void ziMuTa(){
//		  上面窄,外层循环从小开始,那么需要1个循环控制空格,再需要一个循环控制字母;
		   for(int i=1;i<=5;i++){
//			   首先控制空格,空格是由大到小,那么就从大开始循环打印空格
			   for(int j=9-i;j>=1;j--){
				   System.out.print("  ");
			        }
//			   接下来字母是从小到大的排列,那么就从小开始循环
			      for(int m=1;m<=2*i-1;m++){
			    	  System.out.printf(" %c",i+64);
			    	  }
				   System.out.println();
		   }
		   }
	   /**
	    * 
	    * @param args
	  1
    121
   12321
  1234321
 123454321
12345654321
	    */
	   private void numTa(){
		   int c = 0;
//		   问题分析:1.外层循环为6层,2.然后对每行的空格进行控制输出;3.同时再对数字进行控制
		   for(int i = 1;i<=6;i++){
                 for(int j=1;j<=6-i;j++){
                	 System.out.print("  ");
                 }
			    for(int k = 1;k<=2*i-1;k++){
//			    	那么肯定跟k有关系,k是什么,k是数字de循环,来看一下层数,与每行数字个数和数字本身之间的关系,很好的找出了规律
			    /*	for(int m=k;m>i;m--){ //对数字本身关系做个循环找规律
			    		System.out.print(k-i);
			    	}*/
			    	if(k>i){
			    			System.out.print(2*i-k);
			    	}else System.out.print(k);
			    }
			    
			    System.out.println();
		   }
	   }
	   public static void main(String[] args) {
			// TODO Auto-generated method stub
			Shuru shuru = new Shuru();
//	       shuru.age();
//			shuru.threeMax();
//	        shuru.day();
//			shuru.threeNumSum_print();
//			shuru.sum100();
//			shuru.oushu();
//			shuru.intThreeFive();
//			shuru.jieCeng();
//			shuru.yinZi();
//			shuru.suNum();
//			shuru.printSuNum();
//			shuru.jiujiu();
//			shuru.bigTu();
//			shuru.duichen();
//			shuru.ziMuTa();
			shuru.numTa();
		}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值