1.需求:定义一个方法,找出int数组中,最大值的索引下标
[1,2,23,5,6,7,8] 打印出来2
2.需求:定义一个方法,找出int数组中,最小值的索引下标
3.需求:定义一个方法,在指定的int数组中找出指定的数据的下标
[1,2,3,4,5,78,7,8,9]
4. 在一个数组中,找出所有指定数据的下标位置 【难】
5. 完成一个方法,替换掉数组中所有元素之为0的元素,替换为指定元素
6. 完成一个方法,删除指定下标的元素,要求从删除位置开始,之后的元素整体前移。【难】
7. 完成一个方法,添加指定元素到指定下标位置,要求从指定下标位置之后的元素,整体向后移动。【难】
8.冒泡排序
9.选择排序
9. 找出数组中最大的元素,放到下标为0的位置
10. 在上一道题的基础上,不考虑下标为0的元素。
找出数组中最大的元素,放到下标为1的位置
需求:定义一个方法,找出int数组中,最大值的索引下标
package com.qfedu.a_array;
/**
* 定义一个方法,找出int数组中,最大值的索引下标
*/
public class Demo1 {
public static void main(String[] args) {
int[] arr = {1, 3, 5, 17, 9, 2, 4, 6, 17, 10};
int i = maxIndexInArray(arr);
System.out.println(i);
}
/*
* 方法的分析
* 方法名字:maxIndexInArray 主要是方法的功能
* 形式参数:
* 这里需要一个int类型的数组 int[] array
* 返回值类型:
* 这里需要的是得到最大值的索引的下标,就是int类型的数据
*
* */
/**
* 找出指定数组的最大值的索引下标
* @param array 给定的数组,就是从这个数组中找
* @return 最大值的下标
*/
public static int maxIndexInArray(int[] array) {
//1.假设下标为0的时候是最大值
int maxIndex = 0;
//2.利用循环进行两两比较,数据从1的开始
for (int i = 1; i < array.length; i++) {
//3.判断下标为maxIndex元素如果小于下标为i的元素,保存i的值到maxIndex
if (array[maxIndex] < array[i]) {
maxIndex = i;
}
}
return maxIndex;
}
/*
* 代码执行流程:{1, 3, 5, 17, 9, 2, 4, 6, 17, 10};
* 当i = 1 1<10 array[0] < array[1] 1<3 true maxIndex = 1 i=2
* i = 2 2<10 array[1] < array[2] 3<5 true maxIndex=2 i=3
* 3<10 arry[2] < array[3] 5<17 true maxIndex=3 i=4
* 4<10 array[3] < array[4] 17<9false i=5 maxIndex=3
* 5<10 array[3] <array[5] 17<2false i=6 maxIndex=3
* ...
*
*
* */
}
需求:定义一个方法,找出int数组中,最小值的索引下标
package com.qfedu.a_array;
/**
* 定义一个方法,找出int数组中,最大值的索引下标
*/
public class Demo2 {
public static void main(String[] args) {
int[] arr = {89, 3, 5, 17, 9, 2, 4, 6, 17, 10};
int i = minIndexInArray(arr);
System.out.println(i);
}
/*
* 方法的分析
* 方法名字:maxIndexInArray 主要是方法的功能
* 形式参数:
* 这里需要一个int类型的数组 int[] array
* 返回值类型:
* 这里需要的是得到最小值的索引的下标,就是int类型的数据
*
* */
/**
* 找出指定数组的最小值的索引下标
* @param array 给定的数组,就是从这个数组中找
* @return 最大值的下标
*/
public static int minIndexInArray(int[] array) {
//1.假设下标为0的时候是最小值
int minIndex = 0;
//2.利用循环进行两两比较,数据从1的开始
for (int i = 1; i < array.length; i++) {
//3.判断下标为maxIndex元素如果大于下标为i的元素,保存i的值到maxIndex
if (array[minIndex] > array[i]) {
minIndex = i;
}
}
return minIndex;
}
}
定义一个方法,在指定的int数组中找出指定的数据的下标
package com.qfedu.a_array;
public class Demo3 {
public static void main(String[] args) {
int[] arr = {2, 3, 4, 5, 6, 7, 8, 9};
int i = indexOf(arr, 6);
System.out.println(i);
}
/*
* 定义一个方法,在指定的int数组中找出指定的数据的下标
* 找到返回值的下标:0~arr.length-1
* 找不到:-1
* 方法的分析:
* 方法名字:
* indexOf
* 形式参数列表:
* 第一个参数:指定的数组 int[] array
* 第二个参数:int find
* 返回值:
* int类型的数据
* */
public static int indexOf(int[] array, int find) {
//1.假设没有返回的一个变量值
int index = -1;
//2.利用for循环,两两进行比较,找出指定数据在数组中下标的位置,并保存在index
for (int i = 0; i < array.length; i++) {
//3.下标为i的元素就是指定的find数据,保存到index
if(array[i] == find) {
index = i;
//如果找到数据,就终止循环
break;
}
}
return index;
}
/*
{2, 3, 4, 5, 6, 7, 8, 9};
* 分析:i =0 0<8 true arra[i] == find array[0]==6 i=1
i=1 1<8 true array[i]==find array[1] ==6 false
i=2 2<8 true array[i]==find array[2] ==6 false
i=3 3<8 true array[i]==find array[3] ==6 false
i=4 4<8 true array[i]==find array[4] ==6 true index = 4
* */
}
在一个数组中,找出所有指定数据的下标位置 【难】
package com.qfedu.a_array;
public class Demo4 {
public static void main(String[] args) {
int[] arr = {1,3,5,1,3,5,1,3,5};
int[] indexes = new int[arr.length];
int allIndexes = findAllIndexes(arr, indexes, 5);
System.out.println(allIndexes);//3
for (int i = 0; i < allIndexes; i++) {
System.out.println(indexes[i]);
}
}
/*
* 在一个数组中,找出所有指定数据的下标位置 【难】
* [1,2,3,1,2,3,1,2,3]
* 方法分析
* 方法名字:
* findAllIndexes
* 形式参数列表:
* 1.在哪个数组中进行查询 int[] array
* 2.要查询的数据
* 3.需要另外一个数组,用来存储保存找到的数据的下标
* a.该数组是int类型的数据
* b.数组的容量?和需要查询数组的长度保持一致
* 返回值类型:
* 不考虑数组,
* int:返回值找到数据的个数
* */
public static int findAllIndexes(int[] arr, int[] indexes, int find) {
//1.判断参数的额合法性
if(arr == null || indexes == null || arr.length == 0 ||
indexes.length == 0 || arr.length < indexes.length) {
System.out.println("参数有误");
return 0;
}
//2.定义一个变量进行计数,因为你要找个数
int count = 0;
//3.使用for循环,遍历目标数组 arr, 使用if判断,找到目标元素
for (int i = 0; i < arr.length; i++) {
if (arr[i] == find){
//计数 count++
indexes[count++] = i;
}
}
return count;
}
/*
{1,3,5,1,3,5,1,3,5}
* i=0 0<9 arr[0] == 5false
i=1 1<9 arr[1]==5 false
i=2 2<9 arr[2] ==5 true
indexes[0] = 2
i=3 3<9 arr[3] ==5 false
i=4 4<9 arr[4] ==5 false
i=5 5<9 arr[5] ==5 true
indexes[1] = 5
i=6 6<9 arr[6] ==5 false
i=7 7<9 arr[7] ==5 false
i=8 8<9 arr[8] ==5 true
indexes[2]=8
*
* */
}
完成一个方法,替换掉数组中所有元素之为0的元素,替换为指定元素
package com.qfedu.a_array;
import java.util.Arrays;
public class Demo5 {
public static void main(String[] args) {
int[] array = {1,2,3,4,5,0,0,0,0,0};
boolean replace = replace(array, 6);
System.out.println(replace);
//Arrays是java内置的一个类,这个类下面有一个内置的方法叫toString()
//Arrays.toString(array):将一个数组转为字符串输出
System.out.println(Arrays.toString(array));
}
//完成一个方法,替换掉数组中所有元素之为0的元素,替换为指定元素
/*
* 方法分析:
* 方法名:replace
* 形式参数:
* 需要被替换的数组
* 需要替换成什么样的一个int类型的数据
* 返回值:
* 不推荐使用void,这个是黑盒的方法。不知道里面报错没有报错
* 给与当前方法一个监控
* boolean方法替换成功以后返回true,失败为false
* 你怎么知道true,怎么知道是false
* 这个玩意还能失败?
* 1.如果数组的容量为0会失败
* 2.数组的名字是一个引用数据(new的),保存的内存地址不能为null
* */
public static boolean replace(int[] array, int newNumber){
//1.参数的合法性
if(null == array || array.length == 0){
System.out.println("参数不合法");
//告诉调用者,方法执行失败了
return false;
}
//2.开始使用for循环和if进行替换
for (int i = 0; i < array.length; i++) {
if (0 == array[i]){
array[i] = newNumber;
}
}
return true;
}
}
完成一个方法,删除指定下标的元素,要求从删除位置开始,之后的元素整体前移。【难】s
package com.qfedu.a_array;
import java.util.Arrays;
public class Demo6 {
public static void main(String[] args) {
int[] arr = {1,3,5,7,9,11,13,15,17,19};
boolean remove = remove(arr, 17);
System.out.println(remove);
System.out.println(Arrays.toString(arr));
}
/*
* 分析方法:
* 完成一个方法,删除指定下标的元素,要求从删除位置开始,之后的元素整体前移。【难】
* 数组int[] arr = {1,3,5,7,9,11,13,15,17,19};
* 删除以后,需要在数组的末尾补上0
* 方法的名字:
* remove
* 形式参数:
* 1.删除数据的目标数组
* 2.指定能够删除数据的下标位置
* 返回值类型:
* boolean 删除成功返回true, 删除失败返回false
* 什么情况是失败:
* 1、数组的容量为0
* 2、数组中保存的地址null
* 3、给与的删除的下标非法下标
*
*
* */
/**
*
* @param arr
* @param index
* @return
*/
public static boolean remove (int[] arr, int index) {
//1.参数合法性的判断
if(arr == null || arr.length == 0 || index < 0 || index > arr.length-1) {
System.out.println("参数不合法");
return false;
}
/*
* 使用for循环进行操作
* 这个地方使用的是 arr[i] = arr[i+1]
* */
for (int i = index; i < arr.length - 1; i++) {
arr[i] = arr[i + 1];
}
arr[arr.length - 1] = 0;
return true;
}
}
完成一个方法,添加指定元素到指定下标位置,要求从指定下标位置之后的元素,整体向后移动。【难】
package com.qfedu.a_array;
import java.util.Arrays;
public class Demo7 {
public static void main(String[] args) {
int[] arr = {1,3,5,7,9,11,13,15,17,0};
boolean add = add(arr, 27, 250);
System.out.println(add);
System.out.println(Arrays.toString(arr));
}
/*
* 分析方法 完成一个方法,添加指定元素到指定下标位置,要求从指定下标位置之后的元素,整体向后移动。【难】
*
* 方法名字:
* add
* 形式参数:
* 1.目标数组 int[] arr
* 2.制定下标的位置 int index
* 3.添加的数据 int number
* 返回值:
* boolean 成功返回true, 添加失败返回false
* 什么情况会添加失败:
* 1、数组的容量为0
* 2.数组保存的位置为null
* 3.给与的添加下标是一个非法的下标
* */
public static boolean add (int[] arr, int index, int number) {
//1.参数合法性的判断
if(arr == null || arr.length == 0 || index < 0 || index > arr.length - 1) {
System.out.println("参数不合法");
return false;
}
//移动数组中元素,从最后一位开始挪
for (int i = arr.length - 1; i > index ; i--) {
arr[i] = arr[i - 1];
/*
* index=5 arr.length =10
* arr[9] = arr[8];i-- i=8
* arr[8]=arr[7]i-- i=7
* arr[7]=arr[6] i-- i=6
* arr[6]=arr[5] i-- i=5
* false
* */
}
arr[index] = number;
return true;
}
}
冒泡排序和选择排序
冒泡排序:从小到大
他是重复的走访要排序的元素,依次比较相邻的两个元素,如果顺序错误了,两个位置交换一下。
走访工作重复进行,直到没有两个相邻的元素需要交换了,就证明排序完成了。
越小的元素慢慢排在前面。
package com.qfedu.a_array;
import java.util.Arrays;
public class Demo8 {
public static void main(String[] args) {
//依次比较两个相邻的元素,将小的数放在前面,大的数放在后面,
//第一次:首先比较第一个第二个 2 57
//第二次:57 36 ===> 36 57 ==> temp
//第三次:57和78比 57 78
//第四次:78 和3 3 78====> 2 36 57 3 78
// ===>2 36 3 57 78
//===>2 3 36 57 78
//==>
int[] arr = {2,57,36,78,3};
int temp;//临时存储的变量
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]) {
//只有这种情况才交换
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
选择排序
第一次从下标为0 的开始,下标为0 的这个数与后面的n-1个数。找出最小的那个放在下标为0的位置。
第二次从下标为诶1的开始,查询剩余的最小值。放在下标为1的位置。
依次类推直到完成排序。
package com.qfedu.a_array;
import java.util.Arrays;
public class Demo10 {
public static void main(String[] args) {
int[] arr = {32,57,36,78,3};
//第一次拿32索引0 和 57,36,78,3
for (int i = 0; i < arr.length - 1; i++) {//需要进行多少次的选择
//使用一个变量,当成最小值下标,临时索引变量
int index = i;
//找到极值的下标位置
//{32,57,36,78,3}
//arr[0] > arr[1]
for (int j = i + 1; j < arr.length; j++) {//一直在找最小值的索引
if (arr[index] > arr[j]) {
index = j;
}
}
//交换位置
if (index != i) {
int temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
}
/*
* i =0 0<4 index=0 j = 1 1<5 arr[0] > arr[1] false
* j=2 2<5 arr[0] > arr[2] false
* j=3 3<5 arr[0]>arr[3] false
* j=4 4<5 arr[0]> arr[4] true 现在的index=4
* 交换位置int temp = arr[4] ==>3
* arr[4] = arr[0]32
* arr[0] = 3
*{3,57,36,78,32};
*i =1 1<4 index=1 j = 2 2<5 arr[1] > arr[2] true index = 2
*
* j=3 3<5 arr[2] > arr[3] false
* j=4 4<5 arr[2]>arr[4] true index=4
*
* 交换位置int temp = arr[4] ==>32
* arr[4] = arr[1] 57
* arr[1] = 32
**{3,32,36,78,57};
*i =2 2<4 index=2 j = 3 3<5 arr[2] > arr[3] false
*
* j=4 4<5 arr[2] > arr[4] false
* 不用交换
* {3,32,36,78,57};
**i =3 3<4 index=3 j = 4 4<5 arr[3] > arr[4] true index=4
* j=5 5<5false
* 交换 int temp = arr[4]57
* arr[4] = arr[3]78
* arr[3] = temp 57
*
*
* */
}
System.out.println(Arrays.toString(arr));
}
}
找出数组中最大的元素,放到下标为0的位置
package com.qfedu.a_array;
import java.util.Arrays;
public class Demo11 {
public static void main(String[] args) {
int[] arr = {1, 3,4,78,56,26};
boolean b = function1(arr);
System.out.println(b);
System.out.println(Arrays.toString(arr));
}
/*
*
* 找出数组中最大的元素,放到下标为0的位置
* 方法名字:
* function1
* 形式参数:
* int[] 数组
* 返回值:
* true 或者false
* */
public static boolean function1(int[] arr) {
if(arr == null || arr.length == 0) {
System.out.println("参数不合法");
return false;
}
//1.找出数组中最大值的下标
int index = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[index] < arr[i]) {
index = i;
}
}
//2.最大值和索引为0的进行交换一下位置。如果刚好下标为0的元素是最大值
if(index != 0) {
int temp = arr[index];
arr[index] = arr[0];
arr[0] = temp;
}
return true;
}
}
今天的代码敲会为止,给你两周时间。
作业:
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
//这是一个菲波拉契数列问题
题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 /*在循环中,只要除数不等于0,用较大数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。 /
题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地时,共经过多少米?第10次反弹多高?
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润,求应发放奖金总数?
题目:输入某年某月某日,判断这一天是这一年的第几天?
https://blog.csdn.net/wufaliang003/article/details/85557260