目录
1.逢7跳过
需求:在控制台打印出1~100之间满足逢7过规则的数据,不满足的打印"过"
public class Test1 {
public static void main(String[] args) {
knockSeven();
}
public static void knockSeven(){
for (int i =1;i<100;i++){
if (i%7==0||i%10==7||i/10==7){
System.out.println("过");
}else {
System.out.println(i);
}
}
}
}
2.判断两个数组是否相同
- 需求: 定义一个方法, 比较两个数组的内容是否相同
- 要求: 长度, 内容, 顺序完全相同
public class Test3 {
/*
== :
1. 基本数据类型 : 比较数据值
2. 引用数据类型 : 比较地址值
*/
public static void main(String[] args) {
int[] arr1 = {11, 22, 33};
int[] arr2 = {11, 22, 33, 44};
boolean result = checkArrayContent(arr1, arr2);
System.out.println(result);
}
public static boolean checkArrayContent(int[] arr1, int[] arr2) {
// 1. 比较两个数组的长度
if (arr1.length != arr2.length) {
return false;
}
// 2. 比较两个数组的元素内容
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != arr2[i]) {
return false;
}
}
// 3. 如果代码能够走到这里, 代表两个数组长度, 内容, 顺序完全相同
return true;
}
}
3.数组元素求和
需求 :
有这样的一个数组,元素是 {68,27,95,88,171,996,51,210}
求出该数组中满足要求的元素和
要求是:求和的元素个位和十位都不能是7,并且只能是偶数
public class Test2 {
public static void main(String[] args) {
int[] arr = {68, 27, 95, 88, 171, 996, 51, 210};
int evenNumberSum = getEvenNumberSum(arr);
System.out.println(evenNumberSum);
}
public static int getEvenNumberSum(int[] arr) {
// 1. 定义求和变量
int sum = 0;
// 2. 遍历数组, 获取到内部的每一个元素
for (int i = 0; i < arr.length; i++) {
// arr[i] : 数组中的每一个元素
// 3. 将每一个元素, 拆分出个位, 十位
int ge = arr[i] % 10;
int shi = arr[i] / 10 % 10;
// 4. 判断
if(ge != 7 && shi != 7 && arr[i] % 2 == 0){
// 5. 求和
sum += arr[i];
}
}
return sum;
}
}
4.查找元素在数组中的索引
4.1不考虑重复
需求:
设计一个方法, 查找元素在数组中的索引位置
查找元素, 在数组中第一次出现的索引位置.
已知一个数组 arr = {19, 28, 37, 46, 50};
键盘录入一个数据,查找该数据在数组中的索引。
并在控制台输出找到的索引值。
如果没有查找到,则输出-1
import java.util.Scanner;
public class Test4_1 {
public static void main(String[] args) {
int[] arr = {19, 28, 37, 46, 50};
Scanner sc = new Scanner(System.in);
System.out.println("请输入您要查找的元素:");
int num = sc.nextInt();
int index = getIndex(num, arr);
System.out.println(index);
}
public static int getIndex(int num, int[] arr) {
// 1. 假设要查找的元素, 在数组中就是不存在的
int index = -1;
// 2. 遍历数组, 获取内部的每一个元素
for (int i = 0; i < arr.length; i++) {
// 3. 比较
if (arr[i] == num) {
// 4. 找到了, 让index变量记录正确的索引位置
index = i;
break;
}
}
return index;
}
}
4.2考虑重复
需求: 设计一个方法, 查找元素在数组中的索引位置 (考虑重复元素问题)
注意: return只能返回一个结果
问题: 当一个方法运行结束后, 有多个结果需要返回, 怎么处理?
回答: 可以将多个结果, 存入一个数组容器, 将数组返回.
public class Test4_2 {
public static void main(String[] args) {
int[] arr = {19, 28, 37, 46, 50, 19, 19};
// 0 1 2 3 4 5 6
int[] results = getIndex(28, arr);
if(results.length == 0){
System.out.println("您要查找的元素, 在数组中不存在");
} else {
for (int i = 0; i < results.length; i++) {
System.out.println(results[i]);
}
}
}
public static int[] getIndex(int num, int[] arr) {
// 1. 统计要查找的元素, 在数组中出现的个数
int count = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] == num){
count++;
}
}
// 2. 根据统计出来的个数, 创建数组容器
int[] results = new int[count];
int index = 0;
// 3. 查找元素在数组中的索引, 将找到的索引, 存入数组容器
for (int i = 0; i < arr.length; i++) {
if(arr[i] == num){
// results[0] = 0;
// results[1] = 5;
// results[2] = 6;
results[index] = i;
index++;
}
}
// 4. 将装满了索引的数组, 返回
return results;
}
}
5.数组元素反转
已知一个数组 arr = {11, 22, 33, 44, 55}; 用程序实现把数组中的元素值交换,
交换后的数组 arr = {55, 44, 33, 22, 11}; 并在控制台输出交换后的数组元素。
1. 确定好谁跟谁换
第一个和倒数第一个 : arr[0] arr[arr.length-1-0]
第二个和倒数第二个 : arr[1] arr[arr.length-1-1]
第三个和倒数第三个 : arr[2] arr[arr.length-1-2]
...
arr[i] arr[arr.length-1-i]
2. 定义三方变量, 套入公式
public class Test5 {
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55};
reverseArray2(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
private static void reverseArray2(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;
}
}
private static void reverseArray1(int[] arr) {
for (int i = 0; i < arr.length / 2; i++) {
int temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
}
}
6.评委打分
需求:
在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。
选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值
1. 基本实现 (不考虑分数校验)
2. 校验键盘录入的分数是否是0~100之间
3. 抽取方法
import java.util.Scanner;
public class Test6 {
public static void main(String[] args) {
int[] arr = initData();
int sum = getSum(arr);
int max = getMax(arr);
int min = getMin(arr);
// 5. 求平均分 (总合 - 最大值 - 最小值) / 4
double avg = ((sum - max - min) * 1.0) / (arr.length - 2);
System.out.println("选手的最后得分为:" + avg);
}
/**
* 数组中找最小值
*/
private static int getMin(int[] arr) {
// 4. 求最小值
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
return min;
}
/**
* 数组中找最大值
*/
private static int getMax(int[] arr) {
// 3. 求最大值
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
/**
* 数组求和
*/
private static int getSum(int[] arr) {
// 2. 求和
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
/**
* 此方法用于键盘录入6个评委的分数
*/
private static int[] initData() {
int[] arr = new int[6];
// 1. 键盘录入6个评委的打分
Scanner sc = new Scanner(System.in);
System.out.println("请输入6个评委的打分:");
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第" + (i + 1) + "位评委的打分:");
int score = sc.nextInt();
// 判断成绩是否正确
if (score >= 0 && score <= 100) {
arr[i] = score;
} else {
System.out.println("您的分数输入有误, 请检查是否是0~100之间的");
i--;
}
}
return arr;
}
}
7.随机产生验证码
需求: 请从26个英文字母(大小写都包含),以及数字0-9中,随机产生一个5位的字符串验证码并打印在控制台
效果: uYq8I,3r4Zj
注意事项: 打印字符类型数组名, 不会看到地址值, 而是元素的内容
import java.util.Random;
import java.util.Scanner;
public class Test7 {
public static void main(String[] args) {
char[] chs = getContents();
String checkCode = getCheckCode(chs);
System.out.println("产生的验证码为:" + checkCode);
}
private static String getCheckCode(char[] chs) {
Random r = new Random();
String checkCode = "";
for(int i = 1; i <= 5; i++){
int randomIndex = r.nextInt(chs.length);
checkCode += chs[randomIndex];
}
return checkCode;
}
private static char[] getContents() {
char[] chs = new char[26 + 26 + 10];
int index = 0;
for(char c = 'a'; c <= 'z'; c++){
chs[index] = c;
index++;
}
for(char c = 'A'; c <= 'Z'; c++){
chs[index] = c;
index++;
}
for(char c = '0'; c <= '9'; c++){
chs[index] = c;
index++;
}
return chs;
}
}