1. 输出1-100以内的质数
代码:
//输出1-100之间的质数
class Test12 {
public static void main(String[] args) {
//因为1既不是质数也不是合数,所以直接从2开始
for (int i = 2; i < 100; i++) {
//假定i是质数,进入循环判断
boolean b = true;
for (int j = 2; j < i; j++) {
//如果i能被某个j整除,说明不是质数
if (i % j == 0) {
b = false;
break;
}
}
//标记没被修改为false的就是质数
if (b) {
System.out.println(i + "是质数");
}
}
}
}
结果:
(单纯截结果太长了报看,截出来我的宝儿姐给各位看看)
2. 用递归求1-100的和
代码:
public class Recursion {
static int sum(int n) {
if (n == 1) {
return 1;
}
return sum(n - 1) + n;
}
public static void main(String[] args) {
System.out.println("sum:" + sum(100));
}
}
结果:
3.有条件最小值(索引法)
代码:
//练习:创建一个数组,产生8个50以内的随机整数保存其中,找能被13整除的数的最小值的索引
class Test9 {
public static void main(String[] args) {
int[] arr = new int[8];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 50);
}
for (int c : arr) {
System.out.print(c + " ");
}
System.out.println();
int minIndex = -1; //minIndex初始值用-1标记
for (int i = 0; i < arr.length; i++) {
if (arr[i] % 13 == 0) { //判断遍历的数能否被13整除
if (minIndex == -1) { //第一个能被13整除的数的下标刷给minIndex
minIndex = i;
} else {
if (arr[i] < arr[minIndex]) { //其余的数进行比较找到最小值,如果有更小的数,再次把下标刷新
minIndex = i;
}
}
}
}
if (minIndex != -1) { //如果minIndex为-1,说明没有符合条件的数,此处进行保护
System.out.println("minIndex = " + minIndex);
} else {
System.out.println("没有能被13整除的数");
}
}
}
结果:
4.数组反转
代码:
class Test10 {
public static void main(String[] args) {
int[] arr = new int[8];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 20);
}
//遍历打印原数组的值
for (int c : arr) {
System.out.print(c + " ");
}
System.out.println();
//对原数组进行反转处理
for (int i = 0; i < arr.length / 2; i++) {
//交换i位置下标和length-1-i下标位置的值
int tmp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = tmp;
}
//遍历打印反转后数组的值
for (int c : arr) {
System.out.print(c + " ");
}
}
}
结果:
5.冒泡排序(必会)
代码:
//练习:冒泡排序
class Test11 {
public static void main(String[] args) {
int[] arr = new int[8];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 20);
}
//遍历打印原数组的值
for (int c : arr) {
System.out.print(c + " ");
}
System.out.println();
//冒泡排序
int tmp;
for (int i = 0; i < arr.length - 1; i++) { //交换arr.length-1次即可
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
//遍历打印冒泡排序后数组的值
for (int c : arr) {
System.out.print(c + " ");
}
System.out.println();
}
}
结果:
6,7,8,9前置代码
Student[] stuArr = new Student[10];
//创建一个拥有10个元素的Student引用数组,保存10个学生对象
//学号1-10,姓名:小明,年级随机1-6,分数随机0-100
//随机姓名
String[] name1 = {"赵", "钱", "孙", "李", "周", "吴", "郑", "王", "张"};
String[] name2 = {"二虎", "铁蛋", "铁柱", "建国", "二妞", "翠花", "狗蛋", "富贵", "刚子"};
for (int i = 0; i < stuArr.length; i++) {
int id = i + 1;
int index1 = (int) (Math.random() * 10000 % name1.length);
int index2 = (int) (Math.random() * 10000 % name2.length);
String name = name1[index1] + name2[index2];
int grade = (int) (Math.random() * 6 + 1);
double score = (int) (Math.random() * 101);
stuArr[i] = new Student(id, name, grade, score);
}
//遍历
for (Student student : stuArr) {
System.out.println(student.say());
}
System.out.println("--------------------------------");
6.有条件最值(引用数组标记值)
代码:
//找三年级最高分,最牛人(标记值改为null,比较通用的写法)
//找三年级最牛的人
Student maxStudent = null; //引用类型的标记用null
for (Student student : stuArr) {
if (student.getGrade() == 3) {
if (maxStudent == null) {
maxStudent = student;
} else {
if (student.getScore() > maxStudent.getScore()) {
maxStudent = student;
}
}
}
}
if (maxStudent != null) {
System.out.println("三年级最高分 : " + maxStudent.getScore());
System.out.println("三年级最牛人的信息 : " + maxStudent.say());
} else {
System.out.println("没有三年级的同学");
}
结果:
7.取子数组(必会)
代码:
//取出所有4年级同学的信息
Student[] newArr = new Student[stuArr.length];
int count = 0;
for (Student student : stuArr) {
if (student.getGrade() == 4) {
newArr[count++] = student;
}
}
// 缩减数组
Student[] resultArr = new Student[count];
for (int i = 0; i < count; i++) {
resultArr[i] = newArr[i];
}
//遍历新数组,打印结果
for (Student student : resultArr) {
System.out.println(student.say());
}
结果:
只有两个四年级的
8.删除数组元素
代码:
//有效元素个数
int size = 10;
//要删除的下标
int index = 5;
//从index处开始,右边的值向左边复制,直到最后一个结束
for (int i = index; i < size - 1; i++) {
stuArr[i] = stuArr[i + 1];
}
//因为多了一个重复值,将最后一个元素置空
stuArr[--size] = null;
//遍历
for (Student student : stuArr) {
if (student != null) {
System.out.println(student.say());
} else {
System.out.println(student);
}
}
结果:
可以看到6号学生信息没了
9.改进版选择排序(必会)
代码:
//让固定的位置保存单次循环中最小值
//改进版选择排序
for (int i = 0; i < stuArr.length - 1; i++) {
//以i位置,为基准位置,让它取保存最小值(包括基准位置在内到右面的所有数中的最小值)
int minIndex = i;//假定基准位置就是i最小值
//从基准位置右侧到后面所有数中找更小值的
for (int j = i + 1; j < stuArr.length; j++) {
if (stuArr[j].getScore() < stuArr[minIndex].getScore()) {
minIndex = j;//记录更小的值的位置j
}
}
if (minIndex != i) { //如果基准位置就是最小值,就不交换
Student tmp = stuArr[i];
stuArr[i] = stuArr[minIndex];
stuArr[minIndex] = tmp;
}
}
//遍历
System.out.println("选择排序-->成绩排名 : " + "\n");
for (Student student : stuArr) {
System.out.println(student.say());
}
结果:
10.快速排序(想会)
代码:
public class ArrayTest {
//快速排序递归部分
public static void quick(int[] arr, int begin, int end) {
if (begin >= end - 1) {
return;
}
int key = arr[begin];
int keyIndex = begin;
for (int i = begin + 1; i < end; i++) {
if (arr[i] < key) {
keyIndex++;
int tmp = arr[keyIndex];
arr[keyIndex] = arr[i];
arr[i] = tmp;
}
}
arr[begin] = arr[keyIndex];
arr[keyIndex] = key;
quick(arr, begin, keyIndex);
quick(arr, keyIndex + 1, end);
}
//快速排序
public static void main(String[] args) {
int[] arr = new int[8];
//随机数的数组
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 20);
}
//遍历
for (int i : arr) {
System.out.print(i + " ");
}
System.out.println();
//递归
quick(arr, 0, arr.length);
//遍历
for (int i : arr) {
System.out.print(i + " ");
}
}
}
结果:
11.杨辉三角(了解)
代码:
public class YangHui {
public static void main(String...args) {
//声明一个10行的二维数组
int[][] arr = new int[10][];
//外循环,给每行的数组声明长度
for (int i = 0; i < arr.length; i++) {
//i行i个元素
arr[i] = new int[i + 1];
//内循环,给每行的数组刷值
for (int j = 0; j < arr[i].length; j++) {
//第一列和最后一列都是1
if (j == 0 || j == arr[i].length - 1) {
arr[i][j] = 1;
} else { //第三行开始,杨辉三角算法
if (i > 1) {
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
}
}
//遍历
for (int[] ints : arr) {
for (int anInt : ints) {
System.out.print(anInt + " ");
}
System.out.println();
}
}
}
结果:
Q.E.D.