12.7 Java基础7
- 昨天作业讲解及修改
英中天气转换器
import java.util.Scanner;
/**
* 天气转换器 大小写字母都可以
*
* @author Administrator
*
*/
public class Test_Review_Homework {
public static void main(String[] args) {
// 实现一个简单的英中天气转换器:输入表1中天气状况英文单词的第一个字母,根据输入来判断天气状况,
// 并输出天气的中文形式。用户可重复输入进行转换,输入n退出系统。
Scanner input = new Scanner(System.in);
String a;
String choice = "y";
do {
System.out.println("请输入天气状况的第一个字母");
a = input.next();
switch (a) {
case "D":
case "d":
System.out.println("干燥");
break;
case "M":
case "m":
System.out.println("潮湿");
break;
case "H":
case "h":
System.out.println("炎热");
break;
case "R":
case "r":
System.out.println("下雨");
break;
}
System.out.println("是否继续:(y/n)");
choice = input.next();
} while (choice.equals("y") || choice.equals("Y")); // choice.equalsIgnoreCase("y")
System.out.println("已退出系统");
}
}
我原本用的while和switch嵌套,不过老师说用do...while至少执行一次更好。。还有我没有考虑到用户可能输入小写。
完数
/**
* 一个数如果恰好等于他的因子之和,这个数就称为“完数”。例如6=1+2+3,找出1000以内的所有完数。
*
*
* 6 = 1*6 6 = 2*3 6= 3 *2 我们就说: 1 2 3 都是6的因子 ; 6 = 1+2+3
*
* @author Administrator
*
*/
public class Test_Review_Homework2 {
public static void main(String[] args) {
// 这里i就是我们要判断是否 i = xx+xx+xx+xx...;
for (int i = 1; i < 1000; i++) {
int sum = 0;
// 求i的因子
for (int j = 1; j < i; j++) {
// 用i去模j
if (i % j == 0) {
// 此时是因子
// System.out.println(j);
sum += j;
}
}
// 判断
if (sum == i) {
System.out.println("完数:" + i);
}
}
}
}
- 数组的基础回顾
多数据存储,类型相同,一组数据的集合
下标,中括号
创建 类型 [] 名字= new 类型[长度]
创建 类型 [] 名字= new 类型[]{1,2,3}
创建 类型 [] 名字= {1,2,3} CP: 数组和循环
下标从0开始,到长度-1结束。
- 求数组元素最大值最小值
import java.util.Scanner;
/**
* @多数据存储,类型相同,一组数据的集合
* @下标,中括号
* @创建 类型 [] 名字= new 类型[长度]
* @创建 类型 [] 名字= new 类型[]{1,2,3}
* @创建 类型 [] 名字= {1,2,3} CP: 数组和循环
* @下标从0开始,到长度-1结束
* @author Administrator
*
*/
public class Max {
public static void main(String[] args) {
// 定义数组保存5个学生的成绩
int[] arr = new int[5];
// 提示用户输入
Scanner input = new Scanner(System.in);
System.out.println("请输入5个学生的成绩");
for (int i = 0; i < arr.length; i++) {
arr[i] = input.nextInt();
}
// 假设第一个元素为最大值[一定是在赋值之后]
int max = arr[0];
// 输出
// 1普通for循环
for (int i = 1; i < arr.length; i++) {
if (max < arr[i]) {
max = arr[i];
}
}
// 输出最大值
System.out.println("5个学生的成绩最高分为" + max);
}
}
import java.util.Scanner;
/**
* @多数据存储,类型相同,一组数据的集合
* @下标,中括号
* @创建 类型 [] 名字= new 类型[长度]
* @创建 类型 [] 名字= new 类型[]{1,2,3}
* @创建 类型 [] 名字= {1,2,3} CP: 数组和循环
* @下标从0开始,到长度-1结束
* @author Administrator
*
*/
public class Min {
public static void main(String[] args) {
// 定义数组保存5个学生的成绩
int[] arr = new int[5];
Scanner input = new Scanner(System.in);
// 提示用户输入
System.out.println("请输入5个学生的成绩");
for (int i = 0; i < arr.length; i++) {
arr[i] = input.nextInt();
}
// 假设第一个元素为最小值[一定是在赋值之后]
int min = arr[0];
// 输出
// 1普通for循环
for (int i = 1; i < arr.length; i++) {
if (min > arr[i]) {
// 就证明array[i]比min比小
min = arr[i];
}
}
// 输出最小值
System.out.println("5个学生的成绩最低分为" + min);
}
}
- 求和与平均值
import java.util.Scanner;
/**
* @多数据存储,类型相同,一组数据的集合
* @下标,中括号
* @创建 类型 [] 名字= new 类型[长度]
* @创建 类型 [] 名字= new 类型[]{1,2,3}
* @创建 类型 [] 名字= {1,2,3} CP: 数组和循环
* @下标从0开始,到长度-1结束
* @author Administrator
*
*/
public class SumAndAverage {
public static void main(String[] args) {
int[] arr = new int[3];
Scanner input = new Scanner(System.in);
// 提示用户输入
System.out.println("请输入3个数字");
double sum = 0;// 和double做运算得到的类型仍是double
// 数组赋值
for (int i = 0; i < arr.length; i++) {
arr[i] = input.nextInt();// 不是单个数字,用变量接收只能得到一个
// 累加
sum += arr[i];
}
// 输出和与平均值
System.out.println("sum:" + sum + ",average:" + (sum / arr.length));
input.close();
}
}
- 冒泡排序
import java.util.Arrays;
/**
* {1,2,3,4,5,6}数组长度为6,比较5轮,每轮比较的次数都比上一轮少5 4 3 2 1
* 6-1-0 6-1-1 6-1-2 6-1-3 6-1-4
* @author Administrator
*
*/
public class Bubble {
public static void main(String[] args) {
int[] arr = { 10, 35, 8, -9, 0, 1, 16 };
for (int i = 0; i < arr.length - 1; i++) {// 外循环控制比较的轮数[长度-1]
int c = 0;// 定义c为计数器
for (int j = 0; j < arr.length - 1 - i; j++) {// 内循环控制每轮比较的次数
if (arr[j] > arr[j + 1]) {
c++;
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
System.out.println("第" + (i + 1) + "轮第" + c + "次交换后数组为: " + Arrays.toString(arr));
}
}
}
for (int i : arr) {
System.out.print(i + " ");
}
for (int i = 0; i < arr.length - 1; i++) {// 外循环控制比较的轮数[长度-1]
for (int j = 0; j < arr.length - 1 - i; j++) {// 内循环控制每轮比较的次数
if (arr[j] < arr[j + 1]) {
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
System.out.println("\n***************");
for (int i : arr) {
System.out.print(i + " ");
}
}
}
- 选择排序
/**
* 选择排序 先从无序列表中选出最小值,然后和最左边的做交换
* 选择排序的主要思想是寻找未排序中最小的元素加入到已有序列,
* 直到未排序序列为空。
* 有一无序数组,如下,现按照选择排序的规则进行升序排序:
* @author Administrator
*
*/
public class ChoiceSort {
public static void main(String[] args) {
int[] array = { 23, 45, 67, -98, 55, 101 };
int smaller;
for (int i = 0; i < array.length - 1; i++) {// 最后一个元素不用比
smaller = i;
for (int j = i + 1; j < array.length; j++) {// 不和自己比较
if (array[smaller] > array[j]) {
smaller = j;
}
}
if (smaller != i) {// 相等意味着i下标的元素为最小,不相等意味着不是最小要做交换
int tempData = array[smaller];
array[smaller] = array[i];
array[i] = tempData;
}
}
for (int i : array) {
System.out.print(i + " ");
}
}
}
- 二维数组
可以以九宫格的行列来理解二维数组(行为一维数组的索引,列为二维数组的索引)
/**
* @二维数组的定义
* @author Administrator
*
*/
public class Test_Array_Array_01 {
public static void main(String[] args) {
// 第一个[]行 第二个[] 列
int[][] array = new int[3][3];
// 访问数名[行索引][列的索引]
// [3][3] 行索引 0 1 2
// 列的索引 0 1 2
array[0][0] = 1;
array[0][1] = 2;
array[0][2] = 3;
// ArrayIndexOutOfBoundsException: 3
// array[0][3] = 4;
array[1][0] = 1;
array[2][1] = 2;
// 这里行的索引只能是0 1 2
// array[3][2] = 3;
}
}
/**
* @二维数组的定义
* @author Administrator
*
*/
public class Test_Array_Array_02 {
public static void main(String[] args) {
//第一个[]行 第二个[] 列 长度
//可以不指定列长度
//但这种强烈不推荐.
int[][] array = new int[3][];
//访问数名[行索引][列的索引]
//NullPointerException 空指针异常
//引用类型
// array[0][0] = 1;
array[0] = new int [3];
array[0][0] = 1;
array[0][1] = 1;
array[0][2] = 1;
}
}
public class Test_Array_Array_03 {
public static void main(String[] args) {
// 第一个[]行 第二个[] 列 长度
// 可以不指定列长度
// 强烈不推荐.
int[][] array1 = new int[][] { { 1, 2 }, { 4, 5 }, { 7, 8 } };
// 第一维的长度
System.out.println(array1.length);//3
int[][] array2 = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
System.out.println(array2[2][0]);
}
}
- 练习:杨辉三角
public class YangHuiTriangle {
public static void main(String[] args) {
int[][] array = new int[10][10];
for (int i = 0; i < 10; i++) {// 行 向右为正
for (int j = 0; j <= i; j++) {// 列 向下为正
if (j == 0 || i == j) {//规律
array[i][j] = 1;
} else {
array[i][j] = array[i - 1][j] + array[i - 1][j - 1];//规律
}
System.out.print(array[i][j] + "\t");
}
System.out.println();// 换行
}
}
}
感想:今天学的略微难了些,不过也都还可以理解。。画图,或者列出数组找规律都可以得出相关办法。只是冒泡排序和选择排序的一些步骤写的时候要小心,切不可张冠李戴。
18:30:57 2021-12-07
posted on 2021-12-07 18:30 heyiyang1312 阅读(62) 评论(0) 收藏 举报
浙公网安备 33010602011771号