Java基础(七)——Java基础语法(循环练习、数组选择排序、冒泡排序、折半查找)

目录

第一章 循环练习

1.1奇数和

1.2输出所有的水仙花数

1.3ASCII编码表

1.4利用for循环打印ABCDEFG...XYZ,26个大写字母与26个小写字母

1.5利用for循环打印 9*9 表

第二章 数组方法练习

2.1定义打印数组元素

 2.2数组元素逆序

2.3 数组元素选择排序

2.4 数组元素冒泡排序

2.5数组元素二分查找(折半查找)


第一章 循环练习

1.1奇数和

编写程序求 1+3+5+7+……+99 的和值。

package day7;

public class Ood {
	public static void main(String[] args) {
		int sum =0;
		for(int i=1;i<100;i++) {
			if(i%2!=0) {
				sum+=i;
			}
			
		}
		System.out.println("1-99奇数和为:"+sum);
	}
}

 

1.2输出所有的水仙花数

所谓水仙花数是指一个数3位数,其每位数字立方和等于其本身,如153 = 1*1*1 + 3*3*3 + 5*5*5

package day7;
/*输出所有的水仙花数,
 * 所谓水仙花数是指一个数3位数,其每位数字立方和等于其本身,
 * 如153 = 1*1*1 + 3*3*3 + 5*5*5

 */
public class NarcissisticNumber {
	public static void main(String[] args) {
		int ge,shi,bai=0;
		for(int i=100;i<1000;i++) {
			bai=i/100;
			shi= (i%100)/10;
			ge=i%10;
			if((bai*bai*bai+shi*shi*shi+ge*ge*ge)==i) {
				System.out.println(i);
			}
			
		}
	}
	
}

 

1.3ASCII编码表

在计算机中,所有的数据在存储和运算时都要使用二进制数表示, 一些常用的符号,在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码)。

  • 计算机使用二进制存储,但对人类不友好,不易认识,不易计算,我们就人为的约定自己的一套编码表,让计算机可以直接识别人类的文字,就产生了ASCII编码表。人类的文字和一个整数一一对应。(只识别英文)
  • 因此中国开始做自己的编码表,第一个简体中文编码表为GB2312,因为存储的汉字太少,升级为GBK
  • 因为不同地区有自己的编码表,因此国际标准组织ISO进行了统一,产生了Unicode

 

需要记忆的有:

  • 数字0-9对应ASCII编码十进制为48-57
  • 字母a-z对应ASCII编码十进制为97-122
  • 字母A-Z对应ASCII编码十进制为65-90

int 与char数据的类型转换:

char两个字节,int四个字节

  •     char转为int类型是,类型自动提升,char查询编码表,得到数值
  •     int转为char型,强制转换,计算机需要查询编码表

char存储汉字,查询Unicode编码表

  • char存储空间为2个字节,16位都是数值位,

               char取值为:0-2^16即0-65535,

  • short存储空间为2个字节,首位是符号位(0表示整数,1为负数),剩下15位都是数值位,

               short取值范围-2^15-2^15,即-32768-32767

Unicode编码表中,一个汉字也是存储两个字节。

package day7;
/*
ASCII编码表演示
int 与char数据的类型转换
char两个字节,int四个字节
	char转为int类型是,类型自动提升,
	char查询编码表,得到数值
int转为char型,强制转换,计算机需要查询编码表
char存储汉字,查询Unicode编码表
char存储空间为2个字节,16位都是数值位,char取值为:0-2^16即0-65535,
short存储空间为2个字节,首位是符号位(0表示整数,1为负数),剩下15位都是数值位,
	short取值范围-2^15-2^15,即-32768-32767
*/
public class ASCIIDemo {
	public static void main(String[] args) {
		
		char an= 'a';
		int i = an+1; //98
		System.out.println(i);
		
		int j = 90;
		char h = (char)j;
		System.out.println(h);//Z
		
		System.out.println((char)6);//♠
		
		int k = '你';	//汉字查Unicode
		System.out.println(k);
		
		char m = 65535;
	}
}

 

1.4利用for循环打印ABCDEFG...XYZ,26个大写字母与26个小写字母

package day7;
//字母a-z对应ASCII编码十进制为97-122,字母A-Z对应ASCII编码十进制为65-90
public class Letter {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		for(int i=65;i<=90;i++) {
			System.out.print((char)i+"  ");
			System.out.println((char)(i+32)+"  ");
		}

	}

}

结果:

 

1.5利用for循环打印 9*9 表

package day7;
//9*9乘法表
public class MultiplicationTable {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		print99(9);
}
	
	public static void print99(int n) {
		for(int i=1;i<=n;i++) {
			for(int j=1;j<=i;j++) {
				System.out.print(j+"*"+i+"="+i*j+"   ");
			}
			System.out.println();
		}
	}

	}

 

第二章 数组方法练习

2.1定义打印数组元素

按照给定的格式打印[11, 33, 44, 22, 55]

package day7;

public class ArrayMethodTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int arr[] = {2,4,5,3};
		printArray(arr);
		printArray(arr);
	}
public static void printArray(int arr[]) {
	System.out.print("[");
	for(int i=0;i<arr.length;i++) {
		if(i<arr.length-1)
			System.out.print(arr[i]+",");
		else
			System.out.println(arr[i]+"]"); //如果用print,下一次调用时还在同行
	}
}
}

 

 2.2数组元素逆序

数组的逆序与反向遍历的不同:

  • 数组的逆序:原数组元素位置发生变化
  • 反向遍历:数组为发生变化,只是反向输出了一次。

数组的逆序思想:交换最远端的两个数据。

package day7;
/*
数组的逆序(数组元素位置发生变化):
  数组中的元素,进行位置上的交换
	 逆序 不等于 反向遍历(反向遍历只是倒序输出,数组元素位置未发生变化)
	 就是数组中最远的两个索引,进行位置交换,实现数组的逆序
	 */
public class ArrayMethodTest_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr = {3,5,7,1,0,9,-2};
		reverse(arr);
		printArray(arr);
	}		
	
//方法一:	
//	public static void reverse(int arr[]) {
//		int min=0;
//		int max= arr.length-1;
//		int t=0;
//		while(min<max) {
//			t=arr[max];
//			arr[max]=arr[min];
//			arr[min]=t;
//			min++;
//			max--;
//		}
//	}
	
//方法二:
	public static void reverse(int arr[]) {
		int t=0;
		for(int min=0,max= arr.length-1;min<max;min++,max--) {
			t=arr[max];
			arr[max]=arr[min];
			arr[min]=t;
		}
	}
		
	public static void printArray(int arr[]) {
		System.out.print("[");
		for(int i=0;i<arr.length;i++) {
			if(i<arr.length-1)
				System.out.print(arr[i]+",");
			else
				System.out.println(arr[i]+"]"); //如果用print,下一次调用时还在同行
		}
	}
	
	}


结果:

2.3 数组元素选择排序

注意传参时int arr[]和int[] arr都是可以的,[]跟在变量名后面或者跟在类型后面都可以。

选择排序:第i次循环,arr[i]与其后的每个元素都进行比较,第i次循环确定出第i小元素(第一轮arr[0],与arr[1],arr[2],arr[3]……arr[n]依次比较,大的往后放

第二轮arr[1]与arr[2]与arr[3]……arr[n]依次比较……)

2.4 数组元素冒泡排序

冒泡排序:每次循环确定出一个最大的。(每次确定出arr[length-i-1]位置的元素)

package day7;
/*
数组的排序: 一般都是升序排列,元素,小到大的排列

两种排序的方式
   选择排序: 数组的每个元素都进行比较
	 冒泡排序: 数组中相邻元素进行比较
	 规则: 比较大小,位置交换
*/
public class ArrayMethodTest_2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr = {3,1,4,2,56,7,0};
		//selectSort(arr);
		printArray(arr);
		bubbleSort(arr);
		printArray(arr);
	}
	//选择排序
	public static void selectSort(int[] arr) {
		for(int i=0;i<arr.length-1;i++) {
			for(int j =i+1;j<arr.length;j++) {//注意j=i+1
				if(arr[i]>arr[j]) {
					int temp= arr[j];
					arr[j]=arr[i];
					arr[i]=temp;
				}			
			}	
		}
	}
	//冒泡排序
	public static void bubbleSort(int[] arr) {
		for(int i=0;i<arr.length-1;i++) {
			for(int j=0;j<arr.length-i-1;j++) {
				//此处j<arr.length-i-1,如果不减1,就会产生越界异常,因为循环里面有j+1
				if(arr[j]>arr[j+1]) {
					int temp= arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
	}
	
	public static void printArray(int arr[]) {
		System.out.print("[");
		for(int i=0;i<arr.length;i++) {
			if(i<arr.length-1)
				System.out.print(arr[i]+",");
			else
				System.out.println(arr[i]+"]"); //如果用print,下一次调用时还在同行
		}
	}
}

结果:

 

2.5数组元素二分查找(折半查找)

package day7;

public class ArrayMethodTest_3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int arr[] = {1,3,5,7,9,11,15};
		int index=binarySearch(arr,15);
		System.out.println(index);
	}
public static int binarySearch(int arr[],int key) {
	int left=0;
	int right=arr.length-1;
	int mid = (left+right)/2;
	while(left<=right) {
	if(key>arr[mid]) {
		left=mid+1;
		mid = (left+right)/2;
	}
	else if(key<arr[mid]) {
		right=mid-1;
		mid = (left+right)/2;}
		else
			return mid;
	}
	return -1;
}
}

结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值