目录
1.4利用for循环打印ABCDEFG...XYZ,26个大写字母与26个小写字母
第一章 循环练习
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;
}
}
结果: