思考题1:看程序写结果,然后分析为什么是这个样子的。并画图讲解。最后总结Java中参数传递规律。
Java中的参数传递问题:
基本类型:形式参数的改变对实际参数没有影响。
因为这个类型所传递的是 “值“,之后的数值的改变,无效
引用类型:形式参数的改变直接影响实际参数。
因为这个类型传递的是 "地址值",而其里面的数值的改变,也会传递过来
[代码]java代码:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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}; } }<arr.length; x++)="" {="" if(arr[x]%2="=0)" arr[x]*="2;" }="" arr="{1,4,3,8,5};" }<="" pre=""></arr.length;> |
思考题2:
某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,
在传递过程中需要加密,加密规则如下:
首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,
然后,把加密后的结果在控制台打印出来。
[代码]java代码:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | /* 某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全, 在传递过程中需要加密,加密规则如下: 首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字, 最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数, 然后,把加密后的结果在控制台打印出来。 分析: 1、键盘输入密码,小于8的整数, 2、将数据加密: A、数据倒序,把这个密码改为数组,则用索引进行倒叙 例:123456 a、给arr[n]的第一位赋值 = 123456 % 10 = 6; b、给arr[n]的第二位赋值 = 123456/10%10 = 5; c、给arr[n]的第三位赋值 = 123456/10/10%10 =45; ... 为了简便,这时候可以使用while语句,条件是 输入的密码 > 0 d、对数据倒序处理,(a其实已经把数据倒序处理了) e、加5 f、用e得到的结果除以10的余数替代这个数字 d、 将第一位和最后一位数字交换 3、打印出结果
*/ import java.util.Scanner; public class JiaMiDome1 {
public static void main(String[] args) { //创建键盘输入 Scanner sc = new Scanner(System.in);
System.out.println("请输入想要加密的密码:"); int number = sc.nextInt();
//调用方法,输出结果 String result = jiaMi(number); System.out.println(result); } //定义String的方法,用来对得到的数据进行一个个的组合,进行字符串组合,更方便 public static String jiaMi(int number){
int[] arr = new int [8]; //建立一个8位的一维数组 int index = 0; //设定数组元素的索引
//首先对数据进行数组化和倒序处理 while(number > 0 ){ arr[index] = number % 10;//对数组的每一位元素进行赋值,这里不要错写为index,index是索引 index ++; //索引移动,对应的数据从右到左 number /= 10; } //加5,用e得到的结果除以10的余数替代这个数字 for(int x = 0;x < index;x ++) //对数据进行遍历,x 比数组的索引小,而不是数组的长度的, // 因为数组的长度固定是8, 而不是输入的密码长度 { arr[x] += 5; //对数组的数据进行改动 arr[x] %= 10; } //将第一位和最后一位数字交换,此处利用第三变量temp int temp = 0; //定义中间变量 temp = arr[0]; //把数组的第一个数据赋值给temp arr[0] = arr[index - 1]; //把数组的最后一个数据赋值给第一个元素 arr[index - 1] = temp; //把第一个数据赋值给最后一个元素
//对数组的元素进行拼接,形成字符串 String s = ""; //建立一个空内容的字符串 for(int x = 0;x < index;x++) //对数据进行遍历,x 比数组的索引小,而不是数组的长度的, // 因为数组的长度固定是8, 而不是输入的密码长度 { s += arr[x]; //数组元素进行拼接,形成字符串 } return s; //返回得到的字符串 } } |