for循环、标号语句和数组

1. for循环语法格式需要注意的地方

  • 格式1(死循环)
    for(;;){}
  • 格式2(死循环)
    int i=1;
    for(;i<10;)
  • 格式3(正确)
    int a,b;
    for(int i=0,j=0;true;j++,i++){}
  • 格式4
    int a,b;
    for(int i=0,j=0;true,i<10;j++,i++){}//错误
    for(int i=0,j=0;true||i<10;j++,i++){}
    boolean check(){return true}
    for(int i=0,j=0;check();j++,i++){}
    注意:初始化条件只能是一条语句
  • 使用场景
    for:次数
    while:当…时候
    do…while:直到…时候

2. 跳转语句

  • break:表示跳出,结束
    用在在循环体和switch语句
  • continue:跳出本次循环
  • 注意的问题:如果在同一个块中,break和continue后不可以有语句,永远也到达不了
    Unreachable code异常(continue同理,一个块里面,跳转语句后不能有语句):
public static void main(String[] args) {
		int i=3;
		while(true){
			if(i==3){
				break;
				System.out.println("end");
			}
		}
	}
public static void main(String[] args) {
		int i=3;
		while(true){
			if(i==3)
				break;
			System.out.println("end");
		}
	}

用continue求1-100的和:

public static int test2() {
		int sum = 0;
		for (int i = 1; i <= 100; i++) {
			if (i % 2 != 0)
				continue;
			sum += i;
		}
		return sum;
	}

	public static void main(String[] args) {
		System.out.println(test2());
	}
  • return语句
    void f(){
    return;
    }
    //错误
    void f(){
    return;
    System.out.println(“end”);
    }

3. 标号语句

  • 给外层循环起名字,给内层循环起名字没啥意义,默认跳出内层
  • 使用在break 和 continue后面
    在这里插入图片描述

4. 数组

  • 定义:具有相同数据类型,按照一定顺序组合而成的一个数据类型。

  • 特点:数据类型相同;有序;下标(索引0~长度-1)

  • 一维数组:

    • 定义:数类型 [] 变量名;
      int[] arr;
      int arr[];
    int[] arr[],b; //arr是二维数组,b是一维数组
    
    • 创建数组(数组是在分类上属于引用类型,所以要分配内存)
      arr = new int[10]; //new了便在堆内存中申请了空间,对应的数据类型会有默认值
    • 赋值
      在这里插入图片描述
      在这里插入图片描述
      注意:两种花括号赋值是有区别的,第一种不能分开,分开就错了;而第二种new会返回一个地址。
      补充:局部变量在使用之前必须初始化,局部变量没有默认值
    • 使用数组数据
      • sysout(arr[0]);
      • for循环
        在这里插入图片描述
      • 增强for
      • Arrays.toString(arr);\
    • 数组复制
      在这里插入图片描述
    	private static void test1() {
    		int[] a = {1,2,3,4,5,6};
    		int[] b = new int[10];
    		System.arraycopy(a, 0, b, 0, 3);
    		System.out.println(Arrays.toString(a));;
    		System.out.println(Arrays.toString(b)); ;
    		
    	}
    

    在这里插入图片描述

    • 数组的扩容
    //数组的扩容,重新创建一个数组
    private static void test2() {
    	int[] a = new int[]{1,2,3,4}; 
    	a = Arrays.copyOf(a, a.length+1); //a重新指向之后,之前的就被回收了
    	System.out.println(Arrays.toString(a));
    }
    

    在这里插入图片描述

    • Syestem.arraycopy()和Arrays.copyof()的区别:
      https://blog.csdn.net/balsamspear/article/details/85069207 ArrayList底层就是用它来实现的扩容
      https://blog.csdn.net/balsamspear/article/details/85078599
    • 数组排序
import java.util.Arrays;
/*
 * 冒泡排序:相邻两个比较,交换,沉到底部,二层循环控制的是每趟的长度(最大的在路上)
 * 快速排序:溜一圈,把最大的放到第一个位置(最大的位置定死)
 * 
 */
public class Demo12 {
	public static void main(String[] args) {
		int[] arr = {7,2,9,4,1};
		test(arr);
		System.out.println(Arrays.toString(arr));
		Outer:for(int i = 1; i < 3 ; i++) {
		       Inner:for(int j = 1; j < 3; j++) {
		          if(j == 2)
		            continue Outer;
		          System.out.println(i + ","+ j);
		       }
		     }
	}

	private static void test(int[] arr) {
		
		for(int i=0;i<arr.length;i++){
			int min = arr[i];
			for(int j = i + 1;j<arr.length;j++){
				if(arr[j] < min){
					min = arr[j];
					swap(arr,i,j);
				}
			}
		}
	}

	private static void swap(int[] arr, int i, int j) {
		arr[i] = arr[i] ^ arr[j];
		arr[j] = arr[i] ^ arr[j];
		arr[i] = arr[i] ^ arr[j];
	}
}

public class Demo11 {
	
	
	public static void main(String[] args) {
		int[] arr = {1,2,3,4,5};
		test(arr);
		System.out.println(Arrays.toString(arr));
	}

	private static void test(int[] arr) {
		boolean key = false;
		
			for(int i=0;i<arr.length-1;i++){
				for(int j =0;j<arr.length-i-1; j++){
					System.out.println("111");
					if(arr[j] > arr[j+1]){
						swap(arr,j,j+1);
						key =true;
					}	
				}
				if(!key){
					break;
				}
			}
				
	}
	
			
	
	private static void swap(int[] arr, int i, int j) {
		arr[i] = arr[i] ^ arr[j];
		arr[j] = arr[i] ^ arr[j];
		arr[i] = arr[i] ^ arr[j];
		
	}
}

练习题

  1. 对于代码:
    public class Test {
    public static void main(String[] args){
    int i = 3;
    if(i < 3)
    System.out.println(“haha”);
    System.out.println(“hehe”);
    }
    }
    的输出结果是:B
    A. haha  B. hehe  C. haha hehe  D. hehe haha  E. 编译时报错

  2. 对于代码:
    public class Test {
    public static void main(String[] args){
    int i = 0;
    while(i<10);
    {
    System.out.println(i);
    i++;
    }
    }
    }
    的运行结果是:
    A. 0  B. 1  C. 10  D. 编译报错  E. 没有输出

  3. 对于代码:
    public class Test {
    public static void main(String[] args){
    int i = 5;
    switch(i){
    default:
    int y = 5;
    case 4:
    y += 4;
    case 3:
    y += 3;
    break;
    case 2:
    y += 2;
    case 1:
    y += 1;
    }
    System.out.println(y);
    }
    }
    的运行结果是:D
    A.15  B. 12  C. 9  D. 5  E. 编译时报错

  4. 对于代码:
    public class Test {
    public static void main(String[] args){
    Outer:for(int i = 1; i < 3 ; i++) {
    Inner:for(int j = 1; j < 3; j++) {
    if(j == 2)
    continue Outer;
    System.out.println(i + “,” + j);
    }
    }
    }
    }
    的运行结果是:A、B
    A. 1,1  B. 1,2  C. 2,1  D. 2,2  E. 编译时报错

二、 编程题

1.读入一个三位数,计算其各位数字之和。例如: 123,各位数字之和为6

public class Demo3 {

	public static void test() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个一个数:");
		int s = sc.nextInt();
		int sum = 0;
		while (s % 10 != 0) {
			sum += (s % 10);
			s /= 10;
		}
		System.out.println(sum);
	}

	public static void main(String[] args) {
		test();
	}
}

在这里插入图片描述
2. 计算1+2+3+…+100 的和

public class Demo5 {
	public static int addSum(int n){
		if(n==0)
			return 0;
		return n+addSum(n-1);
	}
	
	public static void main(String[] args) {
		System.out.println(addSum(100));;
	}
}

3.计算1+3+5+…+99 的和

public class Demo13 {
	public static void  add(){
		int sum = 0;
		for(int i=1;i<100;i++){
			if(i%2!=0){
				sum += i;
			}
		}
		System.out.println(sum);
	}
	public static void main(String[] args) {
		add();
	}
}

4.读入一个小于10 的整数n,输出它的阶乘n!

private static void jc() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个数");
		int x = sc.nextInt();
		int sum = 1;
		for(int i=1;i<=x;i++){
			sum *=i;
		}
		System.out.println(sum);
	}

5.求100 以内所有能被3 整除但不能被5 整除的数字的和。
6.“百钱买百鸡”是我国古代的著名数学题。题目这样描述:3文钱可以买1只公鸡,2文钱可以买一只母鸡,1文钱可以买3只小鸡。用100 文
钱买100 只鸡,那么各有公鸡、母鸡、小鸡多少只?
7.搬砖问题:36块砖,36人搬,男搬4,女搬3,两个小孩抬1砖,要求一次全搬完,问男、女和小孩各若干?

public class Demo14 {
	
	public static void main(String[] args) {
		test();
	}

	private static void test() {
		for(int a = 0; a<=36; a++)
			for(int b = 0; b<=36; b++)
				for(int c = 0; c<=36; c++){
					if(a*8+6*b+c==72&&a+b+c==36)
						System.out.println(a+" "+b+" "+c);
				}
	}
}

8.读入一个整数n,输出如下图形:
当输入 n=3时,输出:
   *
  ***
 *****
当输入n=4时,输出:
     *
    ***
   *****
  *******

public class Demo7 {
	public static void test() {
		int key = 1;
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个数字:");
		int x = sc.nextInt();
		for (int i = x; i > 0; i--) {
			for (int j = 1; j < i; j++) {
				System.out.print(" ");
			}
			for (int m = key; m >= 1; m--)
				System.out.print("*");
			System.out.println();
			key = key + 2;
		}
	}

	public static void main(String[] args) {
		test();
	}
}
  1. 输出99 乘法表
package cn.tedu.day03.demo;

public class Demo2 {

	public static void test1(){
		for(int i=0;i<4;i++){
			for(int j=0;j<5;j++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
	
	
	public static void test2(){
		for(int i=0;i<5;i++){
			for(int j=0;j<=i;j++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
	
	public static void cfb(){
		for(int i=1;i<=9;i++){
			for(int j=1;j<=i;j++){
				System.out.print(i+"x"+j+"="+i*j+"\t");
			}
			System.out.println();
		}
	}
	public static void main(String[] args) {
		test1();
		System.out.println("===================");
		test2();
		System.out.println("==================");
		cfb();
	}
}

在这里插入图片描述

  1. 求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a3 + b3 + c3 = abc,则abc是水仙花数。
public class Demo6 {
	public static void test() {
		for (int i = 100; i < 1000; i++) {
			int sum = 0;
			int key = i;
			while (key != 0) {
				sum += (key % 10) * (key % 10) * (key % 10);
				key /= 10;
			}
			if (sum == i)
				System.out.println(i);
		}

	}

	public static void main(String[] args) {
		test();
	}
}

在这里插入图片描述
12. 输入一个整数, 计算它各位上数字的和。(注意:是任意位的整数)

  1. 输入一整数A,判断它是否质数。
public class Demo4 {
	static int sum = 0;

	public static void test() {
		System.out.println(1);
		System.out.println(2);
		for (int i = 3; i <= 1000; i++) {
			for (int j = 2; j <= Math.sqrt(i) + 1; j++) {
				if (i % j == 0)
					break;
				if ((int) Math.sqrt(i) + 1 == j) {
					System.out.println(i);
					sum++;
				}
			}

		}
	}

	public static void main(String[] args) {
		test();
		System.out.println(sum);
	}
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值