Java基础(二)流程语句与数组
阅读原文时间:2023年07月10日阅读:1

**Java流程语句详解:https://www.cnblogs.com/jiajia-16/p/6008200.html**

**Java数组详解:https://www.cnblogs.com/jiajia-16/p/6026278.html**

**Java递归解析:https://www.cnblogs.com/yoyohong/p/5754812.html**

Java流程语句训练题:

1、从键盘分别输入年、月、日,判断这一天是当年的第几天。

public class TestLiuCheng {

// 从键盘分别输入年、月、日,判断这一天是当年的第几天。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入年:");
int year = sc.nextInt();
System.out.println("请输入月:");
int month = sc.nextInt();
System.out.println("请输入日:");
int day = sc.nextInt();
int sumDay = 0;
switch (month){
case 12:
sumDay += 30;
case 11:
sumDay += 31;
case 10:
sumDay += 30;
case 9:
sumDay += 31;
case 8:
sumDay += 31;
case 7:
sumDay += 30;
case 6:
sumDay += 31;
case 5:
sumDay += 30;
case 4:
sumDay += 31;
case 3:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
sumDay += 29;
else
sumDay += 28;
case 2:
sumDay += 31;
case 1:
sumDay += day;
}
System.out.println(year + "年" + month + "月" + day + "日是今年的第" + sumDay
+ "天");
}
}

2、写出下面三个问题代码

(1)、 输出从1到100之间所有的整数;
(2)、 输出从1到100之间所有的奇数;
(3)、 输出从1到100之间所有不能被3整除的数;并输出这些整数的和

public class LiuChengTest {
@Test
public void fun1(){
int sum = 0;
for (int i = 1; i <= 100; i++){
sum += i;
}
System.out.println(sum);
}

@Test  
public void fun2(){  
    int sum = 0;  
    for (int i = 1; i <= 100; i++){  
        if (i % 2 != 0){  
            sum += i;  
        }  
    }  
    System.out.println(sum);  
}

@Test  
public void fun3(){  
    int sum = 0;  
    for (int i = 1; i <= 100; i++){  
        if ( i % 3 != 0 ){  
            sum += i;  
            System.out.println(i);  
        }  
    }  
    System.out.println(sum);  
}  

}

3、打印下面两个图形

(1)、输入高度,输出直角三角形。如:输入4, 将输出如下图形

(2)、输入高度,输出倒直角三角形。如:输入4, 将输出如下图形

#

@Test
public void fun4(){
for ( int i = 1; i <= 4; i++){
for (int k = 1; k <= i; k++){
System.out.print("*");
}
System.out.println();
}
}

@Test  
public void fun5(){  
    for (int i = 1; i<= 4; i++){  
        for (int k = i; k <= 4; k++){  
            System.out.print("\*");  
        }  
        System.out.println();  
    }  
}

4、打印九九乘法表

@Test
public void fun6(){
for (int i = 1; i <= 9; i++){
for (int k = 1; k <= i; k++){
System.out.print(i + "*" + k + "\t=" + i*k+"\t" );
}
System.out.println();
}
}

5、求两个数的最大公约数和最小公倍数

@Test
public void fun7(){
int m = 12;
int n = 20;
int max = (m > n) ? m : n;
int min = (m < n) ? m : n;

    for (int i = min; i>=1; i--){  
        if (m % i == 0 && n % i ==0){  
            System.out.println("最大公约数是:"+i);  
            break;  
        }  
    }

    for (int k = max; k <= m\*n; k++ ){  
        if (k % m == 0 && k % n == 0){  
            System.out.println("最小公倍数是:"+k);  
            break;  
        }  
    }  
}

Java数组排序算法与数据结构:

一、什么是数据结构

  1、数据结构:

  编程的本质就是对数据(信息以数据的形式而存在)的处理,实际编程中不得不处理大量数据,因此实际动手编程之前必须先分析处理这些数据,处理数据之间存在的关系。 现实的数据元素之间有着纷繁复杂的逻辑关系,需要采用合适的物理结构来存储这些数据,并以此为基础对这些数据进行相应的操作。同时,还要分析这些数据结构在时间、空间上的开销的优劣。这种专门研究应用程序中数据之间逻辑关系、存储方式及其操作的学问就是数据结构。

  2、逻辑结构:

  数据元素之间存在的关联关系被称为数据的逻辑结构。归纳起来,应用程序中的数据大致有如下四种基本的逻辑结构:

  集合:数据元素之间只有“同属于一个集合”的关系

  线性关系:数据元素之间存在一个对一个的关系

  树形结构:数据元素之间存在一个对多个的关系

  图状结构或网状结构:数据元素之间存在多个对多个的关系。

  同一种的逻辑结构,在底层通常有两种物理存储结构:

    顺序存储结构 一维数组

    非顺序存储结构 链式存储结构(链表)、散列结构

    算法的设计取决于逻辑结构;算法的实现依赖于存储结构

  对于普通线性表而言,它的作用是一个容器,用于盛装具有相似结构的数据。

  分为顺序存储结构和链式存储结构 可以进行插入、删除和排序的操作

  如果线性表,只允许在线性表的某端添加、删除元素,这时就演变为:栈和队列

  (1)、栈(stack)(先进后出,或者后进先出),是一种特殊的线性表,只能在固定在一端(线性表的尾端)进行插入、删除操作。 允许进行插入、删除操作的一端为栈顶top,另一端为栈底bottom。

    进栈:将一个元素插入栈的过程。栈的长度+1。“压入栈”

    出栈:删除一个元素的过程。栈的长度-1。“弹出栈”

    分类:分为顺序栈结构和链式栈结构

(2)队列(queue),也是一种特殊的线性表,使用固定的一端(队尾rear)来插入数据,另一端(对头front)用于删除数据。 先进先出。就像购物一样,先进入队伍的顾客先获得服务,整个队伍按固定方向移动。

分为顺序队列结构和链式队列结构。

从JDK1.5开始,java集合框架提供了Queue接口。实现该接口的类可以当成队列使用。

(3)、树,也是一种数据结构,非线性的,这种结构内的元素存在一对多的关系。 树,尤其是二叉树应用很广泛。哈夫曼树和哈夫曼编码就是二叉树的重要用途。排序二叉树、平衡二叉树、红黑树。

    二叉树:在普通树的基础上,让一棵树中每个节点最多只能包含两个子节点,且严格区分左子节点和右子节点(位置不能换)。

    遍历二叉树,考虑深度优先遍历(先序遍历、中序遍历和后序遍历)和广度优先遍历。

    红黑树:一种更高效的检索二叉树,常用来实现关联数组。在实际编程中都有极为广泛的用途,例如JDK提供的集合类TreeMap就是一棵红黑树的实现。

      红黑树在只读操作上,跟普通排序二叉树上的只读操作相同,只是检索性能好。对于删除和插入操作可能导致树不再符合红黑树的特征。(需要进行颜色的调换)

      红黑树的特性:首先满足排序二叉树的特性;每个节点要么红色,要么黑色;根节点是黑色的;所有叶子节点都是null且为黑色;红色节点的两个子节点是黑色的;从任一节点到其子树的每个叶子节点的路径都包含相同数量的黑色节点)

数组的算法:https://www.cnblogs.com/frankdeng/p/9013392.html

数组的常见排序:https://blog.csdn.net/qq_41664447/article/details/81391646