需求1:设计一个方法用于数组遍历,要求遍历的结果是满足一下格式的:[11,22,33,44,55]
public class MethodDemo1 {
public static void main(String[] args) {
int[] arr = {11,22,33,44,55};
printArray(arr);
}
static void printArray(int[] arr){
for (int i : arr) {
System.out.println(i);
}
}
}
刚开始很容易写出来这样的代码,但是仔细一看却发现根本不能满足题目上的要求,于是进行修改,首先就是各个元素之间不换行并且用逗号分隔,那么就使用print语句输出元素并且和逗号进行拼接;然后就是数据的首和尾之间缺少方括号,那就加上。
public class MethodDemo1 {
public static void main(String[] args) {
int[] arr = {11,22,33,44,55};
System.out.print("[");
printArray(arr);
System.out.print("]");
}
static void printArray(int[] arr){
for (int i : arr) {
System.out.print(i + ",");
}
}
}
查看输出结果,却发现在55后面多一个逗号,所以要再进行修改,加上if判断语句,如果是数组的最后一个元素,则只输出元素,不和,进行拼接,并且将第二版代码中加上"[]"的代码放到方法中。
输出结果如下:
再次修改后的代码如下:
public class MethodDemo1 {
public static void main(String[] args) {
int[] arr = {11,22,33,44,55};
printArray(arr);
}
static void printArray(int[] arr){
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if(i == arr.length - 1){
System.out.print(arr[i]);
}
else{
System.out.print(arr[i] + ",");
}
}
System.out.print("]");
}
}
在写代码时有一处错误:if(i == arr.length)有黄色提示,说Condition 'i == arr.length' is always 'false',即条件永远为假,因为i是数组的下标,最大值只能为arr.length-1,所以应该修改为if(i == arr.length - 1)。
需求2:设计一个方法求数组的最大值,并将最大值返回
public class MethodDemo2 {
public static void main(String[] args) {
int[] arr = {11,22,33,44,55};
System.out.println(getArrayMax(arr));
}
static int getArrayMax(int[] arr){
int max = 0;
for (int i = 0; i < arr.length; i++) {
if(arr[i] > max){
max = arr[i];
}
}
return max;
}
}
其实上述代码还可以进行修改,就是初始化max的值时,可以初始化为数组的第一个元素的值,然后循环从第二个元素开始,这样比较的次数会少一次,效率高一点点。
修改后的代码如下:
public class MethodDemo2 {
public static void main(String[] args) {
int[] arr = {11,22,33,44,55};
System.out.println(getArrayMax(arr));
}
static int getArrayMax(int[] arr){
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if(arr[i] > max){
max = arr[i];
}
}
return max;
}
}
这里再增加一个需求就是求数组中的最小值。
public class MethodDemo2 {
public static void main(String[] args) {
int[] arr = {11,22,33,44,55};
System.out.println(getArrayMin(arr));
}
static int getArrayMin(int[] arr){
int min = arr[0];
for (int i = 0; i < arr.length; i++) {
if(arr[i] < min){
min = arr[i];
}
}
return min;
}
}
即在初始化min的值时,也是给定数组的第一个元素。
需求3:定义一个方法判断数组中的某个数是否存在,并将判断结果返回。
public class MethodDemo3 {
public static void main(String[] args) {
int [] a = {11,22,33,44,55};
System.out.println(contains(a,23));
}
static boolean contains(int[] arr, int num){
for (int i = 0; i < arr.length; i++) {
if(num == arr[i])
return true;
}
return false;
}
}
有一点需要注意,当某个数在数组当中存在的时候,return true时会直接跳出方法返回true(因为return关键字意味着方法结束),说明此数在数组中存在。其他情况就说明此数在数组中不存在就直接返回false了。还有就是什么时候返回false,当与数组中的所有数都比较完成之后没有才能返回false,所以return false是写在循环外面的。
public class MethodDemo4 {
public static void main(String[] args) {
int [] a = {11,22,33,44,55};
System.out.println(contains(a,22));
}
static boolean contains(int[] arr, int num){
boolean flag = false;
for (int i = 0; i < arr.length; i++) {
if(arr[i] == num)
flag = true;
}
return flag;
}
}
还有一种方式是定义一个flag,初始化为false,就是默认不存在,然后我们将此数与数组中的每一个数进行比较,如果相等说明此数存在就将flag修改为ture。
需求4:定义一个方法copyOfRange(int[] arr,int from,int to)
功能:将数组arr从索引from(包含from)开始到索引to(不包含to)的元素复制到新数组中,并将新数组返回。
public class MethodDemo5 {
public static void main(String[] args) {
int [] a = {11,22,33,44,55};
int[] b = copyOfRange(a,1, 4);
for (int i = 0; i < b.length; i++) {
System.out.println(b[i]);
}
}
static int[] copyOfRange(int[] arr, int from, int to){
int[] a = new int[to - from];
int j = 0;
for (int i = from; i < to; i++) {
a[j] = arr[i];
j++;
}
return a;
}
}
一些变量的名字起的不是很好,下面更改一下。
public class MethodDemo5 {
public static void main(String[] args) {
int [] a = {11,22,33,44,55};
int[] copyArr = copyOfRange(a,1, 4);
for (int i = 0; i < copyArr.length; i++) {
System.out.println(copyArr[i]);
}
}
static int[] copyOfRange(int[] arr, int from, int to){
int[] newArr = new int[to - from];
//新数组的索引
int index = 0;
for (int i = from; i < to; i++) {
newArr[index] = arr[i];
index++;
}
return newArr;
}
}
还有一点要注意就是方法的返回类型也可以是数组,以前都没有注意过。