黑马程序员技术交流社区
标题:
谁能帮我看看这样写这个程序行吗
[打印本页]
作者:
^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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
public class Test {
/**
* @param args
* @throws IOException
*/
// 从控制台接受输入数据,数据是小于8位的整数,加密该数据并在控制台上打印
// 加密规则 将数据倒序,每个数字+5,再模10替换该数字,最后将最后一位和第一位互换.
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
// 接受数据输入
BufferedReader bufr = new BufferedReader(new InputStreamReader(
System.in));
String line = null;
while ((line = bufr.readLine()) != null) { // 作为字符串比较方便处理
if (line.length() > 8 || line.length() == 0) {
System.out.println("输入的数字位数超出范围,请重新输入");
continue;
}
if ("over".equals(line)) // 设置结束条件
break;
System.out.println(encode(line));
}
}
private static String encode(String line) {
// TODO Auto-generated method stub
char[] chs = line.toCharArray();
ArrayList<String> al = new ArrayList<String>();
for (char c : chs) {
int i = Character.digit(c, 10); // 将字符转换为数字
if (i == -1) // 如果输入的不是数字,提示错误
return "输入的数值带有字符,请检查";
i = (i + 5) % 10; // 加密后
al.add(Integer.toString(i)); // 将数字转换为字符串存储
}
// System.out.println("加密后:"+al);
Collections.reverse(al); // 将数组反转
String start = al.get(0); // 头尾互换
String end = al.get(al.size() - 1);
al.set(0, end);
al.set(al.size() - 1, start);
// System.out.println("头尾互换:"+al);
return al.toString();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2