1、定义一个方法,该方法能够找出两个小数中的较小值并返回。
public class SmallerValue {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入两个整数: ");int a=sc.nextInt();int b=sc.nextInt();System.out.println("较小值为" + rMin(a, b));}private static int rMin(int a, int b) {int min=a;if (min>b){min=b;}return min;}
}
2、定义一个方法判断整数数组中某一个数是否存在,并将结果返回
package com.itheima.test;/*** @author walls1717* @since 2024/3/7**/import java.util.Scanner;/**** @title: existsOr* @Author Tan* @Date: 2024/3/7 19:44* @Version 1.0*/
public class existsOr {public static void main(String[] args) {Scanner sc=new Scanner(System.in);System.out.println("请输入一个整数");boolean b = exists1(sc.nextInt());if (b==true){System.out.println("存在");}else {System.out.println("不存在");}}private static boolean exists1(int nextInt) {int []array = {1, 2, 3, 4, 5};for (int i = 0; i < array.length; i++) {if (array[i]==nextInt){return true;}}return false;}
}
3、定义一个方法统计指定范围(例如100~200)之间能被3整除的数,并将数放入一个数组中返回
public class Demo03 {public static void main(String[] args) {//创建扫描器Scanner sc = new Scanner(System.in);System.out.println("请输入两个整数");int a=sc.nextInt();int b=sc.nextInt();extracted(a, b);}private static void extracted(int a, int b) {for (int i = 0; i < arrdo(a, b).length; i++) {System.out.print(arrdo(a, b)[i]+" ");}}private static int[] arrdo(int a, int b) {int count=0;for (int i = a,j=0; i <= b; i++){if (i%3==0 ){count++;}}int[] arr=new int[count];for (int i = a,j=0; i <= b; i++) {if (i%3==0 ){arr[j]=i;j++;}}return arr;}
}
4、定义一个方法,接收一个整型数组,判定数组中的元素是否是升序排列,并将结果返回
public class Demo06 {public static void main(String[] args) {int[] arr={1,2,3,5,4};asc(arr);}private static boolean asc(int[] arr) {for (int i = 0; i < arr.length; i++) {for (int j = arr.length-1; j < 0; j--) {if (arr[i]>arr[j]){return false;}}}return true;}
}
5、设计一个方法,可以接收1个整数n(比如4)来代表行数,然后使用方法打印出下面的图形状
打印效果如下:
@
@@
@@@
@@@@
public class Demo05 {public static void main(String[] args) {Scanner sc =new Scanner(System.in);System.out.println("请输入一个整数");input(sc.nextInt());}private static void input(int nextInt) {for (int i = 0; i < nextInt; i++) {for (int j = 0; j <=i ; j++) {System.out.print("@");}System.out.println();}}
}
5、需求:兔子问题(斐波那契数列)。有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?由此可见兔子对象的数据是:1 , 1 , 2 , 3 , 5 , 8 …
首先我们对其数据进行分析,可知从第三天开始,每天的兔子数量等于前两天之和,其次我们要知道递归的思想:
递归:在方法中调用方法本身的现象。注意事项:1.递归要有出口 2.递归次数不宜过多 3.递归所体现的思想,就是拆分合并的思想
public static void main(String[] args) {//定义一个方法去实现逻辑,传入月数并接收其返回值int sum = sumRabbit(20);//打印结果System.out.println("兔子的对数为:" + sum);}private static int sumRabbit(int i) {//判断传来的月数是不是第1个月或者两个月,如果是则返回1if (i == 1 || i == 2) {return 1;} else {//如果传来的月数不是1或者2,那么返回前两个月兔子数量的和;这里采用了递归的思想return sumRabbit(i - 1) + sumRabbit(i - 2);}}
6、数字是有绝对值的,非负数的绝对值是它本身,负数的绝对值是它本身取反。
请定义一个方法,方法能够得到小数类型数字的绝对值并返回。请定义方法并测试。
public class Demo06 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入一个数字");double v = absoluteValue(sc.nextDouble());System.out.println(v);}private static double absoluteValue(double nextDouble) {return nextDouble>0?nextDouble:-nextDouble;/*if (nextDouble<0){return -nextDouble;}else {return nextDouble;}*/}
}
7、定义一个方法,接收两个整数作为数值范围,然后在控制台打印出范围内之间的满足逢七必过
的数
逢七必过规则(数字包含7或者是7的倍数)
public class Demo12 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入两个整数 : ");int start=sc.nextInt();int end=sc.nextInt();printNumbersSkippingSevens(start,end);}private static void printNumbersSkippingSevens(int start, int end) {System.out.println("逢七必过的数字有: ");for (int i = start; i <=end; i++) {
if (containsSeven(i)||isMultipleOfSeven(i)){System.out.println(i);
}}}/*** 是七的倍数* @param i* @return*/private static boolean isMultipleOfSeven(int i) {return i%7==0;}/*** 包含七* @param i* @return*/private static boolean containsSeven(int i) {String numStr=Integer.toString(i);return numStr.contains("7");}方法二:private static void printNUm(int start, int end) {for (int i = start; i <= end; i++) {int ge = i % 10;int shi = i / 10 % 10;if (i %7==0||ge==7||shi==7) {System.out.println(i);}}}
}
8、定义一个方法,接收一个小数数组(小数点后只有1位),然后找出数组中准整数
有几个返回准整数指的是小数点之后全是0的小数
public class Demo08 {public static void main(String[] args) {//定义一个小数数组double[] numbers = {1.0, 2.0, 3.5, 4.0, 5.0, 6.1, 7.0};System.out.println("准整数" + findNearIntegers(numbers));}private static int findNearIntegers(double[] numbers) {int count=0;for (int i = 0; i < numbers.length; i++) {/*if ((numbers[i]*10)%10==0){count++;}*/int n= (int) numbers[i];if (n==numbers[i]){count++;}}return count;}
}
9、请定义一个方法,对正数的小数进行四舍五入的操作(不考虑负数情况)。
四舍五入之后的结果是一个int整数类型并返回。
提示:四舍五入的操作关键是十分位(小数第一位),如何获取十分位?
public class Demo09 {public static void main(String[] args) {//自定义一个数组double[] numbers = {1.2, 2.5, 3.7, 4.6, 5.1};for (int i = 0; i <roundToNearestInt(numbers).length ; i++) {System.out.print(roundToNearestInt(numbers)[i]+" ");}}private static int[] roundToNearestInt(double[] numbers) {int[] arr=new int[numbers.length];for (int i = 0; i < numbers.length; i++) {if (numbers[i]*10%10<5){arr[i]=(int) numbers[i];}else {arr[i]=(int) numbers[i]+1;}}
return arr;}
}
10、现有一个整数数组,数组中的每个元素都是[0-9]之间的数字,从数组的最大索引位置开始到最小索引位置,依次表示整数的个位、十位、百位。。。依次类推。请编写程序计算,这个数组所表示的整数值。例如:
数组:{2, 1, 3, 5, 4}
表示的整数为:21354 // 注:是整数类型的两万一千三百五十四,不是字符串拼起来的。
public class Demo10 {public static void main(String[] args) {int[] arr={2, 1, 3, 5, 4};multiplication(arr);}private static void multiplication(int[] arr) {int sum=0;/*int power=1;for (int i = arr.length-1; i >= 0; i--) {sum+=arr[i]*power;power*=10;}*/for (int i = 0; i < arr.length; i++) {sum=sum*10+arr[i];}System.out.println(sum);}
}
11、定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。(可以创建其他数组,不必须在原数组中改变)
public class Demo11 {public static void main(String[] args) {//定义一个初始数组int[] originalArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};int[] newArray = rearrangeArray(originalArray);System.out.print("[ ");for (int num : newArray) {System.out.println(num);if (num==(newArray.length-1)){System.out.print(", ");}}/*for (int i = 0; i < newArray.length; i++) {System.out.print(newArray[i]);if (i < newArray.length - 1) {System.out.print(", ");}}*/System.out.println(" ]");}private static int[] rearrangeArray(int[] originalArray) {int left=0;int right=originalArray.length-1;//定义一个新数组, 用于存放排列好的数组int[] newarr=new int[originalArray.length];for (int i = 0; i < originalArray.length; i++) {if (originalArray[i]%2==0){newarr[left++]+=originalArray[i];}else {newarr[right--]+=originalArray[i];}}return newarr;}
}
12、已知一个数组 arr = {19, 28, 37, 46, 50}; 键盘录入一个数据,查找该数据在数组中第一次出现的索引。
并在控制台输出找到的索引值。如果没有查找到,则输出-1
public class Demo12 {public static void main(String[] args) {//获取扫描器Scanner sc = new Scanner(System.in);//键入数组int[] arr = {19, 28, 37, 46, 50};System.out.println("请录入一个数据");System.out.println("该数据为"+quaryIndex(arr, sc.nextInt()));}/*** 在数组中查找索引,并判断是否存在** @param arr* @param num* @return*/private static int quaryIndex(int[] arr, int num) {if (num!=arr[arr.length-1]&&num<0){return -1;}//遍历数组查找与输入的数字匹配的索引for (int i = 0; i < arr.length; i++) {if (num==arr[i]){return i;}}return -1;}
}
13、能够合理的设计方法参数和返回值, 并调用方法
需求描述:模拟一个简单的考试管理系统, 已知成绩为 10, 20, 30, 40, 50, 60, 70, 80
- 程序运行后, 展示一个菜单, 根据用户输入的选择, 程序响应不同的业务逻辑
- 程序需要一直运行, 直到用户输入 6 的时候, 程序结束
实现提示:
- 将需要操作的多个成绩, 存入一个数组中
- 使用输出语句构建出菜单
- 利用 switch 或者是 if 语句, 区分出用户输入的 1 2 3 4 5 6
- 1 ~ 5 每一个都是一段独立的功能, 所以定义5个方法, 分别实现业务功能
- 在用户输入 1 ~ 5 的时候, 调用对应的方法
答:
package com.itheima.test;/*** @author walls1717* @since 2024/3/4**/import javax.swing.text.View;
import java.util.Scanner;/*** @title: ExaminationManagementSystem* @Author Tan* @Date: 2024/3/4 8:57* @Version 1.0*/
public class ExaminationManagementSystem {public static void main(String[] args) {//定义成绩数组int[] scores = {10, 20, 30, 40, 50, 60, 70, 80};//获取扫描器Scanner sc = new Scanner(System.in);while (true) {System.out.println("---------------------");System.out.println("欢迎来到黑马考试管理系统");System.out.println("1. 查看成绩");System.out.println("2. 查看最高分");System.out.println("3. 查看最低分");System.out.println("4. 查看平均分");System.out.println("5. 查看不及格人数");System.out.println("6. 退出");System.out.println("---------------------");int input = sc.nextInt();//管理系统编号录入switch (input) {case 1:System.out.println("学生成绩为: ");viewScore(scores);System.out.println();break;case 2:System.out.println("最高分为: " + viewMaxScore(scores));break;case 3:System.out.println("最低分为: " + viewMinScore(scores));break;case 4:System.out.println("平均分为: " + viewAvgScore(scores));break;case 5:System.out.println("不及格人数为: " + viewnoPass(scores));break;case 6:System.out.println("感谢您的使用, 再见");System.exit(0);break;}}}/*** 求平均数* @param scores* @return*/private static double viewAvgScore(int[] scores) {int sum=scores[0];for (int i = 0; i < scores.length; i++) {sum+=scores[i];}return sum/scores.length*1.0;}/*** 不及格人数* @param scores* @return*/private static int viewnoPass(int[] scores) {int noPass=0;for (int i = 0; i < scores.length; i++) {if (scores[i]<60){noPass++;}}return noPass;}/*** 查看最低分* @param arr* @return*/private static int viewMinScore(int[] arr) {int min = arr[0];//最低分for (int i = 0; i < arr.length; i++) {if (arr[i] < min) {min = arr[i];}}return min;}/*** 查看最高分** @param arr*/private static int viewMaxScore(int[] arr) {int max=arr[0];for (int i = 0; i < arr.length; i++) {if (arr[i] > max) {max = arr[i];}}return max;}/*** 查看成绩** @param arr*/private static void viewScore(int[] arr) {System.out.print("[ ");for (int i = 0; i < arr.length; i++) {if ((arr.length - 1) == i) {System.out.print(arr[i]);} else {System.out.print(arr[i] + ", ");}}System.out.print(" ]");}
}
拔高题
1、定义一个方法,在键盘上接收10个整数,然后对10个整数进行按照从小到大的顺序放入一个数组中返回
public class Demo01 {public static void main(String[] args) {System.out.println("请在键盘上输入十个整数");int[] sortedArr = sort(inputNumber()); // 对输入的数组进行排序arrWrite(sortedArr);//打印输出10个排列好的数组}private static int[] sort(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]){// 交换 arr[j] 和 arr[j + 1]int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}return arr;}/*** 排列数组*/private static void arrWrite(int[] arr) {System.out.print("[ ");for (int i : arr) {System.out.print(i);if (i != arr[arr.length-1]) {System.out.print(", ");}}System.out.println(" ]");}/*** 获取十个数组内容* @return*/private static int[] inputNumber() {Scanner sc = new Scanner(System.in);int[] arr = new int[10];for (int i = 0; i < arr.length; i++) {System.out.println("请输入第" + (i + 1) + "个数字: ");arr[i] = sc.nextInt();}return arr;}
}
2、定义一个方法,接收一个数组,然后将数组中的最大值与第一个元素交换,最小值与最后一个元素交换,然后将数组返回
public class Demo02 {public static void main(String[] args) {//假定 一个数组int[] inputArray = {3, 5, 1, 2, 4};int[] modified=swapArray(inputArray);//接受数组printArray(modified);}private static void printArray(int[] arr) {if (arr == null) {System.out.println("Array is null.");return;}System.out.print("[");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]);if (i < arr.length - 1) {System.out.print(", ");}}System.out.println("]");}/*** 将数组中的最大值与第一个元素* 交换,最小值与最后一个元素交换* @param arr* @return*/private static int[] swapArray(int[] arr) {//定义最大值和最小值int maxArr=arr[0];int minArr=arr[0];//定义最大和最小索引int minIndex=0;int maxIndex=0;// 遍历数组,找到最大值和最小值及其索引for (int i = 0; i < arr.length; i++) {if (arr[i]>maxArr){maxArr=arr[i];maxIndex=i;}if (arr[i]<minArr){minArr=arr[i];minIndex=i;}}// 交换最大值和第一个元素int temp=arr[0];arr[0]=maxArr;arr[maxIndex]=temp;// 交换最小值与最后一个元素temp=arr[arr.length-1];arr[arr.length-1]=minArr;arr[minIndex]=temp;return arr;}
}
3、定义一个方法,接收两个整数,计算并返回两个整数的最大公约数
public class Demo03 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入两个整数");System.out.print("第一个整数: ");int a= sc.nextInt();System.out.print("第二个整数: ");int b=sc.nextInt();System.out.println("最大公约数是: " + greatestCommonDivisor(a,b));sc.close();//关闭扫描器}private static int greatestCommonDivisor(int num1, int num2) {// 使用欧几里得算法计算最大公约数while (num2!=0){int temp=num2;num2=num1%num2;num1=temp;}return num1;}
}
4、定义一个方法,接收一个整数数组,请判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true
;否则,返回 false
public class Demo04 {public static void main(String[] args) {//假定有一个数组int[] array = {1, 3, 5, 2, 7, 9, 4, 11, 13};boolean flag = hasConsecutiveOdds(array);System.out.println("数组中是否存在连续三个奇数: " + flag);}/*** 遍历数组查询数组是否存在三个连续奇数** @param arr* @return*/private static boolean hasConsecutiveOdds(int[] arr) {if (arr == null || arr.length < 3) {//数组元素为空或者不满足三个元素return false;}for (int i = 0; i < arr.length - 2; i++) {if (odds(arr[i]) && odds(arr[i + 1]) && odds(arr[i + 2])) {return true;}}return false;}/*** 判断此数是否是奇数** @param num* @return*/private static boolean odds(int num) {return num % 2 != 0;}
}