Java学习笔记——十、基础知识练习

本文介绍了Java编程中的基础练习,包括计算奇数累加和,找出水仙花数,理解ASCII编码表,并展示了如何使用for循环打印字母表。此外,还探讨了简单的排序算法,如选择排序、冒泡排序,以及二分查找法。通过这些实例,深入理解了Java编程的基础概念和算法应用。

十、基础知识练习

1、循环练习

1.1求 1+3+5+7+……+99 的和
public class Demo {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            if (i%2==1) {
                sum += i;
            }
        }
        System.out.println("累加和的值 " + sum);
    }
}
累加和的值 2500
1.2输出所有的水仙花数

水仙花数是指一个数3位数,其每位数字立方和等于其本身

public class Demo {
    public static void main(String[] args) {
        for (int i = 100; i < 1000; i++) {
            int bai = i / 100 % 10;
            int shi = i / 10 % 10;
            int ge = i % 10;

            if (i == bai*bai*bai + shi*shi*shi + ge*ge*ge) {
                System.out.println(i);
            }
        }
    }
}

153 370 371 407

1.3ASCII编码表

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

二进制十进制十六进制字符/缩写解释
00000000000NUL (NULL)空字符
00000001101SOH (Start Of Headling)标题开始
00000010202STX (Start Of Text)正文开始
00000011303ETX (End Of Text)正文结束
00000100404EOT (End Of Transmission)传输结束
00000101505ENQ (Enquiry)请求
00000110606ACK (Acknowledge)回应/响应/收到通知
00000111707BEL (Bell)响铃
00001000808BS (Backspace)退格
00001001909HT (Horizontal Tab)水平制表符
00001010100ALF/NL(Line Feed/New Line)换行键
00001011110BVT (Vertical Tab)垂直制表符
00001100120CFF/NP (Form Feed/New Page)换页键
00001101130DCR (Carriage Return)回车键
00001110140ESO (Shift Out)不用切换
00001111150FSI (Shift In)启用切换
000100001610DLE (Data Link Escape)数据链路转义
000100011711DC1/XON (Device Control 1/Transmission On)设备控制1/传输开始
000100101812DC2 (Device Control 2)设备控制2
000100111913DC3/XOFF (Device Control 3/Transmission Off)设备控制3/传输中断
000101002014DC4 (Device Control 4)设备控制4
000101012115NAK (Negative Acknowledge)无响应/非正常响应/拒绝接收
000101102216SYN (Synchronous Idle)同步空闲
000101112317ETB (End of Transmission Block)传输块结束/块传输终止
000110002418CAN (Cancel)取消
000110012519EM (End of Medium)已到介质末端/介质存储已满/介质中断
00011010261ASUB (Substitute)替补/替换
00011011271BESC (Escape)逃离/取消
00011100281CFS (File Separator)文件分割符
00011101291DGS (Group Separator)组分隔符/分组符
00011110301ERS (Record Separator)记录分离符
00011111311FUS (Unit Separator)单元分隔符
001000003220(Space)空格
001000013321!
001000103422"
001000113523#
001001003624$
001001013725%
001001103826&
001001113927
001010004028(
001010014129)
00101010422A*
00101011432B+
00101100442C,
00101101452D-
00101110462E.
00101111472F/
0011000048300
0011000149311
0011001050322
0011001151333
0011010052344
0011010153355
0011011054366
0011011155377
0011100056388
0011100157399
00111010583A:
00111011593B;
00111100603C<
00111101613D=
00111110623E>
00111111633F?
010000006440@
010000016541A
010000106642B
010000116743C
010001006844D
010001016945E
010001107046F
010001117147G
010010007248H
010010017349I
01001010744AJ
01001011754BK
01001100764CL
01001101774DM
01001110784EN
01001111794FO
010100008050P
010100018151Q
010100108252R
010100118353S
010101008454T
010101018555U
010101108656V
010101118757W
010110008858X
010110018959Y
01011010905AZ
01011011915B[
01011100925C\
01011101935D]
01011110945E^
01011111955F_
011000009660`
011000019761a
011000109862b
011000119963c
0110010010064d
0110010110165e
0110011010266f
0110011110367g
0110100010468h
0110100110569i
011010101066Aj
011010111076Bk
011011001086Cl
011011011096Dm
011011101106En
011011111116Fo
0111000011270p
0111000111371q
0111001011472r
0111001111573s
0111010011674t
0111010111775u
0111011011876v
0111011111977w
0111100012078x
0111100112179y
011110101227Az
011110111237B{
011111001247C
011111011257D}
011111101267E~
011111111277FDEL (Delete)删除

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

public class Demo {
    public static void main(String[] args) {
        char da = 'A';
        char xiao = 'a';
        for (int i = 0; i < 26; i++) {
            System.out.println("大写字母 "+da+" ,小写字母 "+xiao);
            da++; //更新大写字母值
            xiao++; //更新小写字母值
        }
    }
}

大写字母 A ,小写字母 a 大写字母 B ,小写字母 b 大写字母 C ,小写字母 c 大写字母 D ,小写字母 d 大写字母 E ,小写字母 e 大写字母 F ,小写字母 f 大写字母 G ,小写字母 g 大写字母 H ,小写字母 h 大写字母 I ,小写字母 i 大写字母 J ,小写字母 j 大写字母 K ,小写字母 k 大写字母 L ,小写字母 l 大写字母 M ,小写字母 m 大写字母 N ,小写字母 n 大写字母 O ,小写字母 o 大写字母 P ,小写字母 p 大写字母 Q ,小写字母 q 大写字母 R ,小写字母 r 大写字母 S ,小写字母 s 大写字母 T ,小写字母 t 大写字母 U ,小写字母 u 大写字母 V ,小写字母 v 大写字母 W ,小写字母 w 大写字母 X ,小写字母 x 大写字母 Y ,小写字母 y 大写字母 Z ,小写字母 z

1.4打印九九乘法表
public class Demo {
    public static void main(String[] args) {
        for (int j = 1; j < 10; j++) {
            for (int k = 1; k <= j; k++) {
                System.out.print(k +"*"+ j +"="+ j*k +"\t");
            }
            System.out.println();
        }
    }
}
1*1=1    
1*2=2    2*2=4    
1*3=3    2*3=6    3*3=9    
1*4=4    2*4=8    3*4=12    4*4=16    
1*5=5    2*5=10    3*5=15    4*5=20    5*5=25    
1*6=6    2*6=12    3*6=18    4*6=24    5*6=30    6*6=36    
1*7=7    2*7=14    3*7=21    4*7=28    5*7=35    6*7=42    7*7=49    
1*8=8    2*8=16    3*8=24    4*8=32    5*8=40    6*8=48    7*8=56    8*8=64    
1*9=9    2*9=18    3*9=27    4*9=36    5*9=45    6*9=54    7*9=63    8*9=72    9*9=81

2、数据方法练习

2.1按给定格式打印数组
public class Demo {
    public static void main(String[] args) {
        int [] arr = {11,22,33,44,55};
        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.println(arr[i]+"]");
            } else {
                System.out.print(arr[i]+", ");
            }
        }
    }
}
[11, 22, 33, 44, 55]
2.2数组元素逆序
public class Demo {
    public static void main(String[] args) {
        int [] arr = {11,22,33,44,55};
        receive(arr);
        for (int i=0;i < arr.length;i++){
            System.out.print(arr[i] + " ");
        }
    }
    public static void receive(int[] arr){
        for (int start = 0, end = arr.length-1; start < end; start++,end--) {
            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }
    }

}
55 44 33 22 11
2.3数组元素选择排序

简单选择排序是最简单直观的一种算法,基本思想为每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止,简单选择排序是不稳定排序。

在算法实现时,每一趟确定最小元素的时候会通过不断地比较交换来使得首位置为当前最小,交换是个比较耗时的操作。其实我们很容易发现,在还未完全确定当前最小元素之前,这些交换都是无意义的。我们可以通过设置一个变量min,每一次比较仅存储较小元素的数组下标,当轮循环结束之后,那这个变量存储的就是当前最小元素的下标,此时再执行交换操作即可。
在这里插入图片描述

public class Demo {
    public static void main(String[] args) {
        int [] arr = {22,11,55,33,44};
        selectSort(arr);
        for (int i=0;i < arr.length;i++){
            System.out.print(arr[i] + " ");
        }
    }
    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;
                }
            }
        }
    }
}
11 22 33 44 55
2.4数组元素冒泡排序

冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序。
在这里插入图片描述

public class Demo {
    public static void main(String[] args) {
        int [] arr = {22,11,55,33,44};
        bubbleSort(arr);
        for (int i=0;i < arr.length;i++){
            System.out.print(arr[i] + " ");
        }
    }
    //冒泡排序
    public static void bubbleSort(int[] arr) {
        //功能
        //外层循环用来控制数组循环的圈数
        for (int i = 0; i < arr.length-1; i++) {
            //j < arr.length-1 为了避免角标越界
            //j < arr.length-1-i 为了比较效率,避免重复比较
            //内层循环用来完成元素值比较,把大的元素值互换到后面
            for (int j = 0; j < arr.length-1-i; j++) {
                if (arr[j] > arr[j+1]) {
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }
}
11 22 33 44 55
2.5数组元素普通查找
public class Demo {
    public static void main(String[] args) {
        int [] arr = {22,11,55,33,44};
        getArrayIndex(arr,33);
    }
    //普通查找
    public static void getArrayIndex(int[] arr, int number) {
        //把数组中的元素依次与指定的数值 进行比较
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == number) {
                int j = i+1;
                //找到了
                System.out.println("找到了,是第" + j + "个数字:" + arr[i]);
            }
        }
    }
}
找到了,是第4个数字:33
2.6数组元素二分查找(折半查找)
public class Demo {
    public static void main(String[] args) {
        int[] arr = {11,22,33,44,55};
        int key = 33;
        int position = recursionBinarySearch(arr,key,0,arr.length - 1);

        if(position == -1){
            System.out.println("查找的是"+key+",序列中没有该数!");
        }else{
            System.out.println("查找的是"+key+",找到位置为:"+position);
        }

    }

    //普通查找
    /**
     * 使用递归的二分查找
     *title:recursionBinarySearch
     *@param arr 有序数组
     *@param key 待查找关键字
     *@return 找到的位置
     */
    public static int recursionBinarySearch(int[] arr,int key,int low,int high){

        if(key < arr[low] || key > arr[high] || low > high){
            return -1;
        }

        int middle = (low + high) / 2;            //初始中间位置
        if(arr[middle] > key){
            //比关键字大则关键字在左区域
            return recursionBinarySearch(arr, key, low, middle - 1);
        }else if(arr[middle] < key){
            //比关键字小则关键字在右区域
            return recursionBinarySearch(arr, key, middle + 1, high);
        }else {
            return middle;
        }

    }
}
查找的是33,找到位置为:2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CiiikG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值