黑马程序员技术交流社区

标题: 谁能帮我看看这样写这个程序行吗 [打印本页]

作者: ^o(孤8o|狼i¤F    时间: 2014-4-16 00:24
标题: 谁能帮我看看这样写这个程序行吗
/**
* 某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,
*在传递过程中需要加密,加密规则如下:
*首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
*最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,
*然后,把加密后的结果在控制台打印出来。
*、步骤:
*        1:定义一个二维数组
*        2    用一个随机数来哦模拟控制台输入 存放在一维数组当中
*         3:首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字
*  4:最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,
*  5:把加密后的结果在控制台打印出来。
*  
*/
public class PhonePassWordTest {

        /**
         * @param args
         */
        public static void main(String[] args) {
               
                int  initialArr[] = new int[init()];
               
               
                acquireNum(initialArr); //初始化数组
                printArr(initialArr);  //打印数组
                replaceNum(initialArr);//把原来数据中的数字替换掉
                swap(initialArr);                //交换第一个数与最后一个数的值
                System.out.println("加密过后的数字是:");
                printArr(initialArr);
        }
        /***
         * 函数的作用就是调用系统产生小于8 位的随机数给数组赋值
         *  请任意给定一个小于8位的整数,
         *
         * */
        public static int init( ){
               
                Random rand = new Random();
                int size = rand.nextInt(8) + 1;  //产生一耳光0 到8之间的整数
                System.out.println("你输入"+size+"位数的整数是");
                return size;
                }
        /**
         * 从系统产生8位随机数给数组赋值  实现从控制台输入数据的功能
         * @param int []arr
         * @return  没有返回值
         * */
        public  static void acquireNum(int []arr )        {
                for(int i=0 ; i<arr.length-1; i++){
                        arr[i] = (int)(Math.random()*8+1);
                }
        }
       
        /**
         * 数组中每一个元素都  + 5 再用和除以10 的余数代替改数字
         * @param int []arr 存放处理后的每一位数据
         * @return 没有返回值
         * */
        public  static void replaceNum (int [] arr ){
               
                for(int i=arr.length-1; i>=0; i--){
                        arr [i] = ( arr[i] + 5)%10;
                }
               
        }
               
        /**
         *数组中的第一位和最后一位交换
         *@param int []arr 存放处理后的每一位数据
         *@return 没有返回值
         *
         * **/
        public static void swap(int []arr ){
                int temp = 0;
                temp = arr[0];
                arr[0] = arr[arr.length-1];
                arr[arr.length-1] =  temp;
        }
        /**
         *打印数组
         *@param int []arr 存放处理后的每一位数据
         *@return 没有返回值
         *
         * **/
       
        public static void printArr(int [] arr  ){
                for(int i=0; i< arr.length; i++)
                        System.out.print( arr[i]);
                System.out.println( );
                }
        }
如果 直接从控制台输入怎么改写呢  我 不会
作者: doyxy    时间: 2014-4-16 22:18
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.util.ArrayList;
  5. import java.util.Collections;

  6. public class Test {

  7.         /**
  8.          * @param args
  9.          * @throws IOException
  10.          */

  11.         // 从控制台接受输入数据,数据是小于8位的整数,加密该数据并在控制台上打印
  12.         // 加密规则 将数据倒序,每个数字+5,再模10替换该数字,最后将最后一位和第一位互换.

  13.         public static void main(String[] args) throws IOException {
  14.                 // TODO Auto-generated method stub
  15.                 // 接受数据输入
  16.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(
  17.                                 System.in));
  18.                 String line = null;
  19.                 while ((line = bufr.readLine()) != null) { // 作为字符串比较方便处理
  20.                         if (line.length() > 8 || line.length() == 0) {
  21.                                 System.out.println("输入的数字位数超出范围,请重新输入");
  22.                                 continue;
  23.                         }
  24.                         if ("over".equals(line)) // 设置结束条件
  25.                                 break;
  26.                         System.out.println(encode(line));
  27.                 }
  28.         }

  29.         private static String encode(String line) {
  30.                 // TODO Auto-generated method stub
  31.                 char[] chs = line.toCharArray();
  32.                 ArrayList<String> al = new ArrayList<String>();
  33.                 for (char c : chs) {

  34.                         int i = Character.digit(c, 10); // 将字符转换为数字
  35.                         if (i == -1) // 如果输入的不是数字,提示错误
  36.                                 return "输入的数值带有字符,请检查";
  37.                         i = (i + 5) % 10; // 加密后
  38.                         al.add(Integer.toString(i)); // 将数字转换为字符串存储
  39.                 }
  40.                 // System.out.println("加密后:"+al);
  41.                 Collections.reverse(al); // 将数组反转
  42.                 String start = al.get(0); // 头尾互换
  43.                 String end = al.get(al.size() - 1);
  44.                 al.set(0, end);
  45.                 al.set(al.size() - 1, start);
  46.                 // System.out.println("头尾互换:"+al);
  47.                 return al.toString();
  48.         }

  49. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2