Java基础知识-不会的 day07-练习、ASCII编码、逆序、排序

1.for循环的“末尾循环体"可以不是i++,可以每次增长2或者其它数
  for(int i=1;i<100;i+=2){}
2.java语言中乘除和取余先运行哪个?强制类型转换和乘除先运行哪个?
   %和*/优先级是相同的。 从左往右运行。强制类型转换先运行,乘除后运行。
   eg. x=2.5,y=4.7,a=7
        从左到右依次运算
       %和*/优先级是相同的。 
       t=x+a%3*(int)(x+y)%2/4
       =2.5+7%3*(int)(2.5+4.7)%2/4
       =2.5+1*(int)7.2%2/4   
       =2.5+7%2/4
       =2.5+1/4
       =2.5+0
       =2.5
如果t是浮点型, 那么结果就是2.5  如果t是整数类型,那么结果就是2
3.如何取3位数字的个十百位数
  eg.bai = i/100;
     shi = i/10%10;
     ge = i%10;
4.ASCII编码表历史及要点
  人为规定,字母a对应十进制数97,大写字母A对应十进制65。
  数字0-9对应ASCII编码十进制为48-57,字母a-z对应ASCII编码十进制为97-122,字母A-Z对应ASCII编码十进制为65-90。(我理解:因为美国人先写大写字母,所有大写字母的ASCII编码数字靠前)
   有了ASCII码表后,各国做自己的码表,中国从GB2312-->GBK,后来国际标准化组织,弄了一个万国码Unicode.


5.char 和int类型互转,char2个字节,int4个字节。
   char存储的时候,就是存的char变量
  char转化成int时,先变成对应ASCII值,再运算。
   char a = 'a';
   System.out.println(a); // 输出a
   int i = a+1;
   System.out.println(i); // 输出98


6.char存储汉字,查询unicode编码表
7.char可以和int计算,提升为int类型,
  char的取值范围是0-65535
  
  short也是2个字节,取值范围 -32768 - 32767,二进制最高位是符号位,1是负数,0是正数。
  char类型二进制,全是数值,没有符号位。二进制的第一位,0 1不是符号位。
  char又叫做无符号的数据类型(没有符号位)。


8.打印9*9的乘法口诀表
  for(int i=1;i<9;i++){//外行控制行数
     for(int j=1;j<i;j++){
        System.out.println(j+"*"+i+"="+ j*i + " "); //换成"\t",相当于tab键。
   }
}
9.tab键对应字符 "\t"
10.数组的逆序
   前提:数组是从小到大排的
   概念:数组的元素,进行位置上的交换;逆序!=反向遍历
   比如:12345 逆序的实现思想:数组最远端位置的交换,通过索引(指针思想)
代码如下:
public static void main(String[] args){
int[] arr = {1,5,68,17};

//逆序前
printArray(arr);
reverse(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.print(arr[i]+",");
}
}
}

//逆序,默认原先是123456这样按顺序排的
public static void reverse(int[] arr){
//数组遍历,最远端交换
for(int min=0,max = arr.length-1;min<max;min++,max-- ){

    int temp = arr[min];
    arr[min] = arr[max];
                arr[max] = temp;
}
}
11.静态方法不能调用非静态方法的原因
   1.静态方法优先于对象被创建


   2.非静态方法通过对象创建


   3.静态方法在内存中创建后,还没有创建对象,所以不能调用非静态方法和变量。


12.//null 类型调用静态方法,输出什么?
   public class Test{


private static void Print(){
System.out.println("Print()");
}


public static void main(String[] args) {


((Test)null).Print();


}


}


问输出什么?


//输出是Print()


    因为:1.Print()是静态方法,不用对象也可以调用,((Test)null).Print() 这种格式也可以。


          2.null 可以转换成任意引用类型


          3.((Test)null).Print() 相当于 Test t = null; t.Print();


          4.如果将Print()方法的修饰符去掉,执行时会报空指针异常,因为是在静态方法中调用非静态方法。


13.排序一般升序排列
14.选择排序和冒泡排序区别与使用
   
   选择排序:数组的每个元素都进行比较(拿1个数和其他所有数比,把小的数放前面)
   冒泡排序:数组中相邻元素进行比较 (第1个和第1个比,第2个和第3个比,大的跑到最后面)
   规则:比较大小,位置交换


   (1)选择排序:
        定义方法:实现数组的选择排序
        返回值:没有
        参数:数组
        实现步骤:
         1>.嵌套循环
            外循环,控制比较了多少次
            内循环,控制比较多少个元素
         2>.判断元素的大小值
            小值,存储到小的索引


代码如下:
    public static void main(String[] args){
int[] arr = {5,7,6,34,44,9,-4};
selectSort(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++){
if(arr[i] > arr[j]){
//换位置
int temp = arr[i];
arr[i] = arr[j];
arr[j] = 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.print(arr[i]+",");
}
}
}


      (2)冒泡排序
      public static void main(String[] args){
int[] arr = {5,6,1,7,3,0,-2};
bubbleSort(arr);
printArray(arr);
}

//冒泡排序
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++){
//换位
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.print(arr[i]+",");
}
}
}    
15.数组的折半查找
   前提:被查找的数组中的元素,必须有序排列


public static void main(String[] args){
int[] arr = {1,2,3,4,5,6,7};
int index = binarySearch(arr,7);
System.out.println(index);
}
//二分查找
/*
定义方法:实现折半查找
参数:数组,被查找的元素
返回值 索引
实现步骤:1.需要的变量定义
           三个指针
2.进行循环折半
   可以折半的条件 min《=max
3.让被找元素和中间索引元素进行比较
    元素>中间索引 小指针 = 中间+1
元素<中间索引 大指针 = 中间-1
元素 == 中间索引 找到了,结束了,返回中间索引
4.循环结束,无法折半
  元素没有找到,返回-1
*/
public static int binarySearch(int[] arr,int key ){
//1.定义3个变量
int min = 0;
int max = arr.length -1;
int mid = 0;
//循环折半,条件min<= max
while(min <= max){
//计算中间索引
mid = (min+max)/2;
if(key >arr[mid]){
min = mid + 1;
}else if(key < arr[mid]){
max = mid - 1;
}else{
//找到索引,返回元素索引
return mid;
}
}
return -1;
}
     


   

猜你喜欢

转载自blog.csdn.net/nextfailure/article/details/80379348