冒泡排序
package com.shujia.wyh.day07.zuoye2;
public class BubbleSoft {
public static void main(String[] args) {
//使用冒泡排序对一组数进行排序,使得最终结果是一个从小到大的顺序
int[] arr = {11, 23, 45, 22, 1, 45, 25, 68, 19};
System.out.println("排序之前:");
printArray(arr);
System.out.println();
//定义一个方法实现对数组的冒泡排序
int[] arr1 = bubbleSoft(arr);
System.out.println("排序之后:");
printArray(arr1);
}
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i] + "]");
} else if (i == 0) {
System.out.print("[" + arr[i] + ",");
} else {
System.out.print(arr[i] + ",");
}
}
}
//定义方法实现冒泡排序
/**
* 返回值类型:int[]
* 参数列表:int[] arr
*/
public static int[] bubbleSoft(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;
}
}
}
return arr;
}
}
二分法
package com.shujia.wyh.day07.zuoye2;
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个数");
int number=sc.Intnext();
int[] arr = {1, 11, 19, 22, 23, 25, 45, 45, 68};
//判断数组是否为空
if (arr != null) {
//定义start
//起始位置
int start = 0;
//结束位置
int end = arr.length - 1;
//中间指针
int mid = (start + end) / 2;
boolean flag = true;
//由于不知道循环的次数
while (start <= end) {
int midValue = arr[mid];
if (number == midValue) {
System.out.println("找到元素" + number + ",下标索引为:" + mid);
flag = false;
break;
} else if (number < midValue) {
end = mid - 1;
mid = (start + end) / 2;
} else {
start = mid + 1;
mid = (start + end) / 2;
}
}
if (flag) {
System.out.println("数组中没有元素" + number);
}
} else {
System.out.println("数组为空");
}
}
}
数据加密问题
某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来。
package com.shujia.wyh.day07;
import java.util.Scanner;
public class ShuJuJiaMiDemo2 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
boolean flag = true;
while (flag) {
System.out.println("请输入你要输入的整数,长度要小于8");
int number = sc.nextInt();
if (number < 0 || number > 9999999) {
System.out.println("输入的数据有误,请重新输入!!");
} else {
jiaMi(number);
flag = false;
}
}
}
public static void jiaMi(int num) {
System.out.println("加密前数据:\r\n" + num);
//定义一个数组,存储数据
int[] arr = new int[8];
//把数据中的每一位放到数组中,由于题目要求第一步就是逆序
//我们干脆就直接倒着赋值。
//由于我们今后会改进成手动输入,长度是不确定,我们用while循环赋值
int index = 0;
while (num > 0) {
arr[index] = num % 10; // 6,5,4,3,2,1
index++; //1,2,3,4,5,6
num = num / 10; //12345 , 1234,123,12,1,0
}
//将每位数字都加上5,再用和除以10的余数代替该数字,for循环修改
//注意:这里给数组元素做变化的时候需要注意的一点是,操作到index的位置停止,因为我们输入的数据的长度就到index
for (int i = 0; i < index; i++) {
arr[i] += 5;
arr[i] %= 10;
}
//最后将第一位和最后一位数字交换
int temp = arr[0];
arr[0] = arr[index - 1];
arr[index - 1] = temp;
System.out.println("加密后的数据为:");
for (int i = 0; i < index; i++) {
System.out.print(arr[i]);
}
}
}
打印杨辉三角形
1 0 0 0 0
1 1 0 0 0
1 2 1 0 0
1 3 3 1 0
1 4 6 4 1
...
分析规律:
1、任意一行的第一列与最后一列都是1
2、从第三行开始,除去第一列和最后一列,每一列的数是它上一行前一列与上一行本列之和
实现步骤:
1、首先定义一个二维数组,行数可以是n,列数也可以定义成n,这个n可以是我们将来手动输入指定的。
2、给这个二维数组中任意一行的第一列和最后一列赋值1
3、按照我们找到的规律,给其他元素进行赋值
从第三行开始。除第一列和最后一列,其余的数据都是它上一行的前一列与上一行本列的和
4、遍历这个二维数组
package com.shujia.wyh.day07;
import java.util.Scanner;
public class YangHuiDemo {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入你想要的杨辉三角的行数:");
int n = sc.nextInt();
//定义一个二维数组
int[][] arr = new int[n][n];
//给这个二维数组中任意一行的第一列和最后一列赋值1
for(int i=0;i<arr.length;i++){
arr[i][0] = 1; //给每一行的第一个元素赋值1
arr[i][i] = 1; //给每一行的最后一个元素赋值1
}
//按照我们找到的规律,给其他元素进行赋值
//从第三行开始。除第一列和最后一列,其余的数据都是它上一行的前一列与上一行本列的和
for(int i=2;i<arr.length;i++){
//注意:由于我们每一行的第一列与最后一列都赋值了1
//所以我们每一行从第二列开始赋值,一直赋值到倒数第二列,arr[i].length-2
for(int j=1;j<arr[i].length-1;j++){
//都是它上一行的前一列与上一行本列的和
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];
}
}
//遍历二维数组
//类似于九九乘法表
for(int i=0;i<arr.length;i++){
for(int j=0;j<=i;j++){
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}