A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


12 个回复

倒序浏览
  1. /**
  2. 需求 :  模拟密码加密  
  3. 键盘录入6个数的int类型的密码
  4. 存入数组中 然后反转,//数组的反转
  5. 反转后的数组 角标为奇数的互相换 1 和3换  3和 5换 以此类推
  6. 然后数组最后一个角标为奇数的元素 和数组中第一个角标为奇数的元素交换
  7. 打印出来 就欧了 密码是[1,2,3,4,5,6]的话 答案是[6, 5, 4, 1, 2, 3]
  8. */
  9. import java.util.Scanner;
  10. class  PasswordImitation
  11. {
  12.         public static void main(String[] args)
  13.         {       
  14.                 int[] arr = new int[6];

  15.                 getNum(arr);
  16.                 reverseArray(arr);
  17.                 swapJi(arr);
  18.                 swapFirstLast(arr);

  19.                 printArray(arr);
  20.         }

  21.         //循环录入6个整数
  22.         public static void getNum(int[] arr)
  23.         {
  24.                 Scanner sc = new Scanner(System.in);
  25.                 int num;
  26.                 for (int i = 0; i < arr.length; i++)
  27.                 {
  28.                         System.out.println("请依次输入6位整数密码!");
  29.                         System.out.println("请输入第" + i + "位整数,并按Enter确定:");
  30.                         num = sc.nextInt();
  31.                        
  32.                         if (num%10 == num)
  33.                         {
  34.                                 arr[i] = num;
  35.                         }
  36.                         else
  37.                         {
  38.                                 for (; ; )
  39.                                 {
  40.                                         System.out.println("您刚才输入的整数不合法!");
  41.                                         System.out.println("请重新输入第" + i + "位整数:");
  42.                                         num = sc.nextInt();
  43.                                         if (num%10 == num)
  44.                                         {
  45.                                                 arr[i] = num;
  46.                                                 break;
  47.                                         }
  48.                                         else
  49.                                         {
  50.                                                 continue;
  51.                                         }
  52.                                 }
  53.                         }       
  54.                
  55.                 }
  56.         }

  57.        
  58.         //数组反转
  59.         public static void reverseArray(int[] arr)
  60.         {
  61.                 for (int i = 0; i < arr.length/2; i++)
  62.                 {
  63.                         swap(arr,i,arr.length-1-i);
  64.                 }
  65.         }


  66.         //数组奇数角标数据换位
  67.         public static void swapJi(int[] arr)
  68.         {
  69.                 for (int i = 1; i < arr.length-2; i += 2)
  70.                 {
  71.                         swap(arr,i,i+2);
  72.                 }
  73.         }
  74.        

  75.         //交换第一个奇数角标和最后一个奇数角标的数据位置
  76.         public static void swapFirstLast(int[] arr)
  77.         {
  78.                 if (arr.length%2 == 0)
  79.                 {
  80.                         swap(arr,1,arr.length-1);
  81.                 }
  82.                 else
  83.                 {
  84.                         swap(arr,1,arr.length-2);
  85.                 }
  86.         }


  87.         //打印数组
  88.         public static void printArray(int[] arr)
  89.         {
  90.                 System.out.print("[");
  91.                 for (int i = 0; i < arr.length; i++)
  92.                 {
  93.                         if (i == arr.length-1)
  94.                         {
  95.                                 System.out.print(arr[i] + "]");
  96.                         }
  97.                         else
  98.                         {
  99.                                 System.out.print(arr[i] + ",");
  100.                         }
  101.                 }
  102.         }

  103.         //交换位置
  104.         public static void swap(int[] arr,int x,int y)
  105.         {
  106.                 int temp = arr[x];
  107.                 arr[x] = arr[y];
  108.                 arr[y] = temp;
  109.         }
  110. }
复制代码
回复 使用道具 举报
图片好小

以目前所学内容来看,还存在的问题:
1、没有对用户输入的数据类型进行判断,一定要int才可以录入,否则要提示用户重新输入
2、不能对所有位数都使用
回复 使用道具 举报
嗯,写得不错
回复 使用道具 举报
好复杂的样子
回复 使用道具 举报

谢谢,希望多多指教
回复 使用道具 举报
ZZBY 中级黑马 2015-9-11 21:56:10
7#

理清关系就好了
回复 使用道具 举报
ZZBY 中级黑马 2015-9-14 03:14:12
8#
优化了一部分代码
把if语句用三元运算符来写,节省代码
增加函数重载
对部分实现细节进行封装

  1. /**
  2. 需求 :  模拟密码加密  
  3. 键盘录入6个数的int类型的密码
  4. 存入数组中 然后反转,//数组的反转
  5. 反转后的数组 角标为奇数的互相换 1 和3换  3和 5换 以此类推
  6. 然后数组最后一个角标为奇数的元素 和数组中第一个角标为奇数的元素交换
  7. 打印出来 就欧了 密码是[1,2,3,4,5,6]的话 答案是[6, 5, 4, 1, 2, 3]
  8. */
  9. import java.util.Scanner;
  10. class  PasswordImitation
  11. {
  12.         public static void main(String[] args)
  13.         {       
  14.                 int[] arr = new int[6];

  15.                 getSecurityArr(arr);

  16.                 printArray(arr);
  17.         }

  18.         //密码加密
  19.         public static void getSecurityArr(int[] arr)
  20.         {
  21.                 getNum(arr);
  22.                 reverseArray(arr);
  23.                 swap(arr);
  24.                 swapFirstLast(arr);
  25.         }

  26.         //循环录入6个整数
  27.         public static void getNum(int[] arr)
  28.         {
  29.                 Scanner sc = new Scanner(System.in);
  30.                 int num;
  31.                 for (int i = 0; i < arr.length; i++)
  32.                 {
  33.                         System.out.println("请依次输入6位整数密码!");
  34.                         System.out.println("请输入第" + i + "位整数,并按Enter确定:");
  35.                         num = sc.nextInt();
  36.                        
  37.                         if (num%10 == num)
  38.                         {
  39.                                 arr[i] = num;
  40.                         }
  41.                         else
  42.                         {
  43.                                 for (; ; )
  44.                                 {
  45.                                         System.out.println("您刚才输入的整数不合法!");
  46.                                         System.out.println("请重新输入第" + i + "位整数:");
  47.                                         num = sc.nextInt();
  48.                                         if (num%10 == num)
  49.                                         {
  50.                                                 arr[i] = num;
  51.                                                 break;
  52.                                         }
  53.                                         else
  54.                                         {
  55.                                                 continue;
  56.                                         }
  57.                                 }
  58.                         }       
  59.                
  60.                 }
  61.         }

  62.        
  63.         //数组反转
  64.         public static void reverseArray(int[] arr)
  65.         {
  66.                 for (int i = 0; i < arr.length/2; i++)
  67.                 {
  68.                         swap(arr,i,arr.length-1-i);
  69.                 }
  70.         }


  71.         //数组奇数角标数据换位(重载)
  72.         public static void swap(int[] arr)
  73.         {
  74.                 for (int i = 1; i < arr.length-2; i += 2)
  75.                 {
  76.                         swap(arr,i,i+2);
  77.                 }
  78.         }


  79.         //数组元素交换位置(重载)
  80.         public static void swap(int[] arr,int x,int y)
  81.         {
  82.                 int temp = arr[x];
  83.                 arr[x] = arr[y];
  84.                 arr[y] = temp;
  85.         }


  86.         //交换第一个奇数角标和最后一个奇数角标的数据位置
  87.         public static void swapFirstLast(int[] arr)
  88.         {
  89.                 int lastIndex = ((arr.length - 1)%2 == 0)?arr.length-2 : arr.length-1;
  90.                 swap(arr,1,lastIndex);
  91.         }


  92.         //打印数组
  93.         public static void printArray(int[] arr)
  94.         {
  95.                 System.out.print("[");
  96.                 for (int i = 0; i < arr.length; i++)
  97.                 {
  98.                         if (i == arr.length-1)
  99.                         {
  100.                                 System.out.print(arr[i] + "]");
  101.                         }
  102.                         else
  103.                         {
  104.                                 System.out.print(arr[i] + ",");
  105.                         }
  106.                 }
  107.         }
  108. }
复制代码
回复 使用道具 举报
  写的不错, 我这道题没搞明白, copy 走 研究下去,
回复 使用道具 举报
大神啊```~~
回复 使用道具 举报
学习了。。。。。。
回复 使用道具 举报
话说现在键盘录入都用scanner了吗,交个作业

  1. import java.util.Arrays;
  2. import java.io.*;

  3. public class Test51 {

  4.         public static void main(String[] args) {
  5.                 // TODO Auto-generated method stub
  6.                 BufferedReader bufr = null;
  7.                 try{
  8.                         bufr = new BufferedReader(new InputStreamReader(System.in));
  9.                         String line =null;
  10.                         String regex ="\\d{6}";
  11.                         while((line= bufr.readLine())!=null){
  12.                                 if("end".equals(line))
  13.                                         break;
  14.                                 else if(!line.matches(regex)){
  15.                                         System.out.println("请输入6位数的数字密码,如果想结束输入,请输入end");
  16.                                         continue;
  17.                                 }
  18.                                
  19.                                 else{
  20.                                         int[] arr = toInt(line);
  21.                                         System.out.println("你输入的密码是:"+Arrays.toString(arr));
  22.                                         reverseArray(arr);
  23.                                         System.out.println("加密后的密码是:"+Arrays.toString(arr));
  24.                                 }
  25.                         }
  26.                 }
  27.                 catch(IOException e){
  28.                         throw new RuntimeException("读取键盘失败");
  29.                 }
  30.                 finally{
  31.                         if(bufr!=null){
  32.                                 try{
  33.                                         bufr.close();
  34.                                 }
  35.                                 catch(IOException e){
  36.                                         throw new RuntimeException("关闭输入失败");
  37.                                 }
  38.                         }
  39.                 }
  40.                
  41.         }
  42.        
  43.        
  44.        
  45.        
  46.         //将字符串数字转化为int[]
  47.         public static int[] toInt(String s){
  48.                 char[] cha = s.toCharArray();
  49.                 int[] arr = new int[s.length()];
  50.                 for(int i =0;i<cha.length;i++){
  51.                         arr[i]=Integer.parseInt(cha[i]+"");
  52.                 }
  53.                 return arr;
  54.         }
  55.        
  56.        
  57.         //反转数组
  58.         public static void reverseArray(int[] arr){
  59.                 //反转数组
  60.                 for(int i = 0 ,j=arr.length-1;i<arr.length/2;i++ ,j--){
  61.                         swap(arr,i,j);
  62.                 }
  63.                 //交换奇数位的位置
  64.                 for(int i =1;i<arr.length-2;i+=2){
  65.                         swap(arr,i,i+2);
  66.                 }
  67.                 //如果最后一个脚标为奇数,与1号脚标交换位置
  68.                 if((arr.length-1)%2 !=0)
  69.                         swap(arr,1,arr.length-1);
  70.                 return ;
  71.         }
  72.         private static void swap(int[] arr, int i, int j) {
  73.                 // TODO Auto-generated method stub
  74.                 int temp = arr[i];
  75.                 arr[i] = arr[j];
  76.                 arr[j] = temp;
  77.         }
  78. }
复制代码
回复 使用道具 举报
ZZBY 中级黑马 2015-9-14 15:14:31
13#
枕草虫 发表于 2015-9-14 10:49
话说现在键盘录入都用scanner了吗,交个作业

io什么的还没学,请多多指教
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马