文章目录
- 描述
- 思路错误
- 关于增强for循环改变不了数组的值这一现象的疑问
- 代码
- 反思
描述
思路错误
应该是将其放入数组,而不是单纯的读到,因为你要对每一位数字进行操作
关于增强for循环改变不了数组的值这一现象的疑问
我们尝试使用增强for循环 键盘输入 为数组赋值
再尝试使用增强for循环打印数组数据
发现值并未写入数组数组中
于是我们再尝试使用普通for循环赋值,再输出
发现值被写入了数组中
增强for循环中的循环变量相当于一个临时变量,系统会把数组元素依次赋给这个临时变量,而这个临时变量并不是数组元素,它只是保存了数组元素的值。
所以当你赋值时,只是改变了临时变量的值,并不能改变原数组的值。
总结:增强for循环只适合用于数据的读取。
原文链接:关于增强for循环改变不了数组的值这一现象的疑问
代码
package com.zhang;
/*
* 密码加密:
* 系统密码是四位数,如1983.将其加密后传输
* 加密规则是:对每位数+5 对10取余 再将顺序反转
* 得到加密后的新数
*
* */
import java.util.Scanner;
public class Test4 {
public static void main(String[] args) {
code();
}
public static void code(){
//利用数组 得到加密前的密码:
System.out.println("请分别输入密码的四位数,一次只能输入一位:");
Scanner sc = new Scanner(System.in);
int[] password = new int[4];
for (int i = 0;i < password.length;i++){
password[i] = sc.nextInt();
}
/*
我不知道为什么增强for循环的输入没用,但是输出完全没问题
for(int i : password){
i = sc.nextInt();
}*/
// 检查一下键盘输入密码是否正确拿到
System.out.print("加密前:");
for (int pw : password){
System.out.print(pw);
}
//对每一位密码进行操作
/*
还是不能用 为啥啊!!!!!! 我知道了:关于增强for循环改变不了数组的值这一现象的疑问 详细见csdn for(int i : password){
i += 5;
i %= 10;
}*/
for (int i = 0;i < password.length;i++){
password[i] += 5;
password[i] %= 10;
}
System.out.print("反转前");
for (int pw : password){
System.out.print(pw);
}
//数字反转
//还记的之前的数字反转吗,两个变量从前面和后面开始
for(int i=0,j = password.length-1;i < j;i++,j--){
int temp = password[i];
password[i] = password[j];
password[j] = temp;
}
System.out.print("加密后:");
for (int pw : password){
System.out.print(pw);
}
}
}
反思
我看了老师的代码,我并没有正确地理解Java面向对象的特征之一:封装。
我所谓的封装是将代码都放进另一个方法,然后再main方法中调用这个方法。
但其实应该是 把main方法作为目录,骨架。往里面填充东西。
比如说 (而且最开始接收密码我感觉我的方法也不太合理)
最开始 就应该直接让用户输入密码,写一个方法能将每位数字分开,接收数据以后调用方法将其分离为数组。
还有 数组反转,也是应该写一个反转的方法,然后调用。
都写在一个方法里,这和写在main有区别吗?
等我写了在编辑。