加多一个判断,当输入的长度小于指定长度的时候,出错;
如果超出指定长度,则取前几位,譬如指定6位,输入123, 出错;输入123456789,那就只处理123456,忽略后面的789
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws Exception {
System.out.print("请输入加密(解密)和要处理的数字个数:1为加密,2为解密; ");
Scanner scanner = new Scanner(System.in);
String[] input1 = scanner.nextLine().split("\\s+");
String choice = input1[0];
int count = Integer.parseInt(input1[1]);
System.out.print("请输入要处理的数字,用空格隔开:");
String input = scanner.nextLine().replaceAll("\\s+", "");
if(input.length() < count){
throw new Exception("不足" + count + "位数字,请检查输入");
}else if(input.length() > count){
System.out.println("太多数字,将处理前" + count + "个数字:" +
input.substring(0, 6));
input = input.substring(0, 6);
}
if(choice.equals("1")){
if(input.length() < count){
}
String encode = EncodeUtil.encode(input);
System.out.println("加密后的数字是: " + encode);
}else{
String decode = EncodeUtil.decode(input);
System.out.println("解密后的数字: " + decode);
}
}
}
class EncodeUtil{
private static Map
private static Map
public final static String encode(String strToEncode){
if(encodeMap == null){
encodeMap = new HashMap
encodeMap.put("0", "7");
encodeMap.put("1", "5");
encodeMap.put("2", "9");
encodeMap.put("3", "1");
encodeMap.put("4", "3");
encodeMap.put("5", "6");
encodeMap.put("6", "8");
encodeMap.put("7", "0");
encodeMap.put("8", "2");
encodeMap.put("9", "4");
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < strToEncode.length(); i++){
sb.append(encodeMap.get(String.valueOf(strToEncode.charAt(i))));
}
return sb.toString();
}
public final static String decode(String strToDecode){
if(decodeMap == null){
decodeMap = new HashMap
decodeMap.put("7", "0");
decodeMap.put("5", "1");
decodeMap.put("9", "2");
decodeMap.put("1", "3");
decodeMap.put("3", "4");
decodeMap.put("6", "5");
decodeMap.put("8", "6");
decodeMap.put("0", "7");
decodeMap.put("2", "8");
decodeMap.put("4", "9");
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < strToDecode.length(); i++){
sb.append(decodeMap.get(String.valueOf(strToDecode.charAt(i))));
}
return sb.toString();
}
}
------------------测试
C:\Program Files\IBM\RAD 7\jdk\bin>java Test
请输入加密(解密)和要处理的数字个数:1为加密,2为解密; 1 6
请输入要处理的数字,用空格隔开:1 2 3
Exception in thread "main" java.lang.Exception: 不足6位数字,请检查输入
at Test.main(Test.java:19)
C:\Program Files\IBM\RAD 7\jdk\bin>java Test
请输入加密(解密)和要处理的数字个数:1为加密,2为解密; 1 6
请输入要处理的数字,用空格隔开:1 2 3 4 5 6 7
太多数字,将处理前6个数字:123456
加密后的数字是: 591368
C:\Program Files\IBM\RAD 7\jdk\bin>java Test
请输入加密(解密)和要处理的数字个数:1为加密,2为解密; 1 6
请输入要处理的数字,用空格隔开:1 9 9 7 7 1
加密后的数字是: 544005
C:\Program Files\IBM\RAD 7\jdk\bin>java Test
请输入加密(解密)和要处理的数字个数:1为加密,2为解密; 2 6
请输入要处理的数字,用空格隔开:5 4 4 0 0 5
解密后的数字: 199771
import java.util.Scanner;
public class TestFoo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入是加密还是解密,并且输入加密或解密的位数,俩个之间用空格分开:");
int str1=sc.nextInt();
int n=sc.nextInt();
System.out.println("请输入要加密或解密的数字,每位之间用空格分开:");
int[] num=new int[n];
for(int i=0;i
}
int[] cc=new int[n];
//0 1 2 3 4 5 6 7 8 9
//密文数字:7 5 9 1 3 6 8 0 2 4
System.out.println(str1);
if(2==str1){
for(int i=0;i
cc[i]=7;
}else if(1==num[i]){
cc[i]=3;
}else if(2==num[i]){
cc[i]=8;
}else if(3==num[i]){
cc[i]=4;
}else if(4==num[i]){
cc[i]=9;
}else if(5==num[i]){
cc[i]=1;
}else if(6==num[i]){
cc[i]=5;
}else if(7==num[i]){
cc[i]=0;
}else if(8==num[i]){
cc[i]=6;
}else if(9==num[i]){
cc[i]=2;
}
}
System.out.print("解密后的数字是: ");
}else if(1==str1){
for(int i=0;i
cc[i]=7;
}else if(1==num[i]){
cc[i]=5;
}else if(2==num[i]){
cc[i]=9;
}else if(3==num[i]){
cc[i]=1;
}else if(4==num[i]){
cc[i]=3;
}else if(5==num[i]){
cc[i]=6;
}else if(6==num[i]){
cc[i]=8;
}else if(7==num[i]){
cc[i]=0;
}else if(8==num[i]){
cc[i]=2;
}else if(9==num[i]){
cc[i]=4;
}
}
System.out.print("加密后的数字是: ");
}
for(int i=0;i
}
}
}
哦,占位,一会写好
写完了。你看一下
import java.util.ArrayList;
import java.util.List;
public class Conver {
static List src = null;
static List out = null;
public static void main(String[] args) {
String input = "16";
init();
pretre(input);
encrypt("199771");
}
public static void init() {
src = new ArrayList();
out = new ArrayList();
for (int i = 0; i < 10; i++) {
src.add(i + "");
}
out.add(7 + "");
out.add(5 + "");
out.add(9 + "");
out.add(1 + "");
out.add(3 + "");
out.add(6 + "");
out.add(8 + "");
out.add(0 + "");
out.add(2 + "");
out.add(4 + "");
}
public static void pretre(String input) {
int n = Integer.parseInt(input.substring(1));
String str = "";
for (int i = 0; i < n; i++) {
str += ((int) (Math.random() * 100) % 10) + "";
}
if ("1".equals(input.substring(0, 1))) {
encrypt(str);
} else {
decrypt(str);
}
}
public static void encrypt(String str) {
String result = "";
for (int i = 0; i < str.length(); i++) {
result += out.get(src.indexOf(str.substring(i, i + 1)));
}
System.out.println(result);
}
public static void decrypt(String str) {
String result = "";
for (int i = 0; i < str.length(); i++) {
result += src.get(out.indexOf(str.substring(i, i + 1)));
}
System.out.println(result);
}
}
//package wangcai.test;
public interface Endecryption {
public static final byte[] EN={48,49,50,51,52,53,54,55,56,57};
public static final byte[] DE={55,53,57,49,51,54,56,48,50,52};
}
//package wangcai.test;
import java.util.Scanner;
public class Cryption implements Endecryption{
/*
* 原始数字与加密后得到的密文数字之间的对应关系如下:
原始数字:0 1 2 3 4 5 6 7 8 9
密文数字:7 5 9 1 3 6 8 0 2 4
试编写程序把原始数字转换成加密密文或把加密密文转换成原始数字。
输入:
1 6 (第一个数表示加密或解密:1加密,2解密;第二个数表示数字的个数)
1 9 9 7 7 1 (待处理的数字内容)
输出:
5 4 4 0 0 5
*/
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
Cryption c=new Cryption();
System.out.println("请输入是加密还是解密:1加密,2解密");
int ende=sc.nextInt();
if(ende==1)
{
System.out.println("请输入加密的数字个数");
int num=sc.nextInt();
System.out.println("请输入"+num+"个数字");
String temp=new Scanner(System.in).nextLine();
System.out.println(c.Encryption(temp));
}
else if(ende==2)
{
System.out.println("请输入解密的数字个数");
int num=sc.nextInt();
System.out.println("请输入"+num+"个数字");
String temp=new Scanner(System.in).nextLine();
System.out.println(c.Decryption(temp));
}
else
{
System.out.println("输入错误");
}
}
/**
* 加密
* @param temp
* @return
*/
public String Encryption(String temp)
{
String result="";
byte[] temp_byte=temp.getBytes();
for(byte b:temp_byte)
{
int i=0;
for(;i
if(b==EN[i])
{
result+=(char)DE[i];
break;
}
}
if(i==EN.length)
{
result+=(char)b;
}
}
return result;
}
/**
* 解密
* @param temp
* @return
*/
public String Decryption(String temp)
{
String result="";
byte[] temp_byte=temp.getBytes();
for(byte b:temp_byte)
{
int i=0;
for(;i
if(b==DE[i])
{
result+=(char)EN[i];
break;
}
}
if(i==DE.length)
{
result+=(char)b;
}
}
return result;
}
}
加密解密方面的一般采用byte来实现
加密后也一定要是数字?不好意思,我有点不太看不懂