一、基本类型
public class ArgsDemo01 {
public static void main(String[] args) {
int number = 100;
System.out.println("调用change方法前:" + number);
change(number);
System.out.println("调用change方法后:" + number);
}
public static void change(int number) {
number = 200;
}
}
开辟的栈内存里先后执行main主方法和change()方法,在主方法中初始化的number变量值并没有改变,所以最终先后执行change()方法的输出结果都是100。
二、引用类型
public class ArgsDemo02 {
public static void main(String[] args) {
int[] arr = {10, 20, 30};
System.out.println("调用change方法前:" + arr[1]);
change(arr);
System.out.println("调用change方法后:" + arr[1]);
}
public static void change(int[] arr) {
arr[1] = 200;
}
}
main主方法中开辟了栈内存和数组堆内存,在main主方法中初始化数组arr[],再调用change()方法,通过引用数组的地址进行参数的传递,在change()方法中对数组进行了赋值操作,所以最终先后执行的change()方法的输出结果被改变。
三、基础练习
1、逢七跳过
朋友聚会的时候可能会玩一个游戏:逢七过。 规则是:从任意一个数字开始报数,当你要报的数字包含7或者是7的倍数时都要说:过。 为了帮助大家更好的玩这个游戏,这里我们直接在控制台打印出随机数小于100的满足逢七必过规则的数据。 这样,大家将来在玩游戏的时候,就知道哪些数据要说:过。
public class SevenSkip {
public static void main(String[] args) {
int number = getNumber();
System.out.println("随机数为:"+number);
while (true) {
if (number>100){
break;
}
if (number%7==0||number%10==7||number/10%10==7){
System.out.println("过");
}else {
System.out.println(number);
}
number++;
}
}
private static int getNumber() {
int number = (int) (Math.random() * 10) + 1;
return number;
}
}
2、数组元素求和
有这样的一个数组,元素是{68,27,95,88,171,996,51,210}。求出该数组中满足要求的元素和, 要求是:求和的元素个位和十位都不能是7,并且只能是偶数
代码实现
import java.util.Arrays;
public class SumArray {
public static void main(String[] args) {
int[] array = new int[10];
setArrayData(array);
System.out.println(Arrays.toString(array));
int sum = sumArray(array);
System.out.println("数组和为:" + sum);
}
private static int sumArray(int[] array) {
int sum = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] % 10 != 7 && array[i] / 10 % 10 != 7 && array[i] % 2 == 0) {
sum += array[i];
}
}
return sum;
}
/**
* 初始化数组
*
* @param array
*/
private static void setArrayData(int[] array) {
for (int i = 0; i < array.length; i++) {
array[i] = (int) (Math.random() * 100) + 1;
}
}
}
3、判断两个数组是否相同
定义一个方法,用于比较两个数组的内容是否相同
package com.gkl.model;
import java.util.Arrays;
public class CompareArray {
public static void main(String[] args) {
int number = (int) (Math.random()*10)+1;
int[] array1 = new int[number];
int[] array2 = new int[number];
setArrayData(array1);
setArrayData(array2);
System.out.println(Arrays.toString(array1));
System.out.println(Arrays.toString(array2));
boolean flag=compareArray(array1,array2);
System.out.println("两个数组是否相同:"+flag);
}
private static boolean compareArray(int[] array1, int[] array2) {
if (array1.length!=array2.length){
return false;
}
for (int i = 0; i < array1.length; i++) {
if (array1[i]!=array2[i]){
return false;
}
}
return true;
}
/**
* 初始化数组
*
* @param array
*/
private static void setArrayData(int[] array) {
for (int i = 0; i < array.length; i++) {
array[i] = (int) (Math.random() * 10) + 1;
}
}
}
4、查找元素在数组中出现的索引位置
已知一个数组 arr = {19, 28, 37, 46, 50}; 键盘录入一个数据,查找该数据在数组中的索引。
并在控制台输出找到的索引值。如果没有查找到,则输出-1
package com.gkl.model;
import java.util.Scanner;
public class IndexArray {
public static void main(String[] args) {
int[] array = {19, 28, 37, 46, 50};
//键盘输入数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入查找数据:");
int number = scanner.nextInt();
int index = getIndex(array, number);
System.out.println("查找数据的索引值为:"+index);
}
private static int getIndex(int[] array, int number) {
int index = -1;
for (int i = 0; i < array.length; i++) {
if (number == array[i]) {
index = i;
break;
}
}
return index;
}
}
5、数组元素反转
已知一个数组 arr = {19, 28, 37, 46, 50}; 用程序实现把数组中的元素值交换, 交换后的数组 arr = {50, 46, 37, 28, 19}; 并在控制台输出交换后的数组元素。
package com.gkl.model;
import java.util.Arrays;
public class ReverseArray {
public static void main(String[] args) {
int[] array = new int[10];
setArrayData(array);
System.out.println("原数组:" + Arrays.toString(array));
reverseArray(array);
System.out.println("反序数组:" + Arrays.toString(array));
}
private static void reverseArray(int[] array) {
for (int i = 0; i < array.length / 2; i++) {
int temp = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = temp;
}
}
/**
* 初始化数组
*
* @param array
*/
private static void setArrayData(int[] array) {
for (int i = 0; i < array.length; i++) {
array[i] = (int) (Math.random() * 100) + 1;
}
}
}
6、评委打分
在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。 选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值 (不考虑小数部分)。
package com.gkl.model;
import java.util.Arrays;
public class PlayScore {
public static void main(String[] args) {
int[] array = new int[6];
setArrayData(array);
System.out.println(Arrays.toString(array));
int max = getMax(array);
int min = getMin(array);
int sum = getSum(array);
double avg = (sum - max - min)*1.0/(array.length-2);
System.out.println("最低分为:"+min);
System.out.println("最高分为:"+max);
System.out.println("平均分为:"+avg);
}
private static int getSum(int[] array) {
int sum = 0;
for (int i = 0; i < array.length; i++) {
sum += array[i];
}
return sum;
}
private static int getMin(int[] array) {
int min = array[0];
for (int i = 1; i < array.length; i++) {
if (min > array[i]) {
min = array[i];
}
}
return min;
}
private static int getMax(int[] array) {
int max = array[0];
for (int i = 1; i < array.length; i++) {
if (max < array[i]) {
max = array[i];
}
}
return max;
}
/**
* 初始化数组
*
* @param array
*/
private static void setArrayData(int[] array) {
for (int i = 0; i < array.length; i++) {
array[i] = (int) (Math.random() * 21) + 80;
}
}
}