值传递
/* 思考题1:看程序写结果,然后分析为什么是这个样子的。并画图讲解。最后总结Java中参数传递规律。 Java中的参数传递问题: 基本类型:形式参数的改变对实际参数没有影响。基本类型传递的是数据值 引用类型:形式参数的改变直接影响实际参数。引用类型传递的是地址值 */ class ArgsDemo { public static void main(String[] args) { int a = 10; int b = 20; System.out.println("a:"+a+",b:"+b); //a:10,b:20 change(a,b); System.out.println("a:"+a+",b:"+b); //??? a:10,b:20 int[] arr = {1,2,3,4,5}; change(arr); System.out.println(arr[1]); //??? 4 } public static void change(int a,int b) { //a=10,b=20 System.out.println("a:"+a+",b:"+b); //a:10,b:20 a = b; //a=20 b = a + b; //b=40 System.out.println("a:"+a+",b:"+b); //a:20,b:40 } public static void change(int[] arr) { //arr={1,2,3,4,5}; for(int x=0; x<arr.length; x++) { if(arr[x]%2==0) { arr[x]*=2; } } //arr={1,4,3,8,5}; } }
Java 基本类型值传递,引用类型值传递 内存图解:
/* 某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全, 在传递过程中需要加密,加密规则如下: 首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字, 最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数, 然后,把加密后的结果在控制台打印出来。 题目要求: A:数据是小于8位的整数 定义一个int类型的数据 int number = 123456; B:加密规则 a:首先将数据倒序 结果 654321 b:然后将每位数字都加上5,再用和除以10的余数代替该数字 结果 109876 c:最后将第一位和最后一位数字交换 结果 609871 C:把加密后的结果输出在控制台 通过简单的分析,我们知道如果我们有办法把这个数据变成数组就好了。 不是直接写成这个样子的: int[] arr = {1,2,3,4,5,6}; 如何把数据转成数组呢? A:定义一个数据 int number = 123456; B:定义一个数组,这个时候问题就来了,数组的长度是多少呢? int[] arr = new int[8]; //不可能超过8 在赋值的时候,我用一个变量记录索引的变化。 定义一个索引值是0 int index = 0; C:获取每一个数据 int ge = number%10 int shi = number/10%10 int bai = number/10/10%10 arr[index] = ge; index++; arr[index] = shi; index++; arr[index] = bai; ... */ /* 知识点: 变量 数据类型 运算符 键盘录入 语句 方法 数组 */ import java.util.Scanner; class JiaMiDemo2 { public static void main(String[] args) { //创建键盘录入对象 Scanner sc = new Scanner(System.in); //请输入一个数据 System.out.println("请输入一个数据(小于8位):"); int number = sc.nextInt(); //写功能实现把number进行加密 //调用 String result = jiaMi(number); System.out.println("加密后的结果是:"+result); } /* 需求:写一个功能,把数据number实现加密。 两个明确: 返回值类型:String 做一个字符串的拼接。 参数列表:int number */ public static String jiaMi(int number) { //定义数组 int[] arr = new int[8]; //定义索引 int index = 0; //把number中的数据想办法放到数组中 while(number > 0) { arr[index] = number%10; index++; number /= 10; } //把每个数据加5,然后对10取得余数 for(int x=0; x<index; x++) { arr[x] += 5; arr[x] %= 10; } //把第一位和最后一位交换 int temp = arr[0]; arr[0] = arr[index-1]; arr[index-1] = temp; //把数组的元素拼接成一个字符串返回 //定义一个空内容字符串 String s = ""; for(int x=0; x<index; x++) { s += arr[x]; } return s; } }