2014-03-06 68 views
0

我是一名一年级的CS学生,希望找到更好的方式来完成这项任务。Java加密器/解密器方法。

的指令如下:

你的应用程序应使用一个对话框,提示用户输入一个四位数字的号码,然后按如下进行加密:与添加7的结果替换每个数字在将新值除以10后得到余数。然后将第一个数字与第三个数字交换,并将第二个数字与第四个数字交换。然后输出加密号码到控制台。您的应用程序应该使用循环来实现算法。那么写另一个应用程序,您可以输入加密号码,并将反转该方案以获得原始号码。

我们只能用他在课堂上教的技能(基本循环,方法,如果语句) 我们还没有学会阵列,推,堆栈或流行。

到目前为止,我的代码看起来是这样的:

public class Project5e { 

    public static void main(String[] args) { 

     //promt user for the 4 digit number 
     String userIdStr = JOptionPane.showInputDialog("Please enter your four digit user I.D."); 
     int userId = Integer.parseInt(userIdStr); 

     encryptId(userId); 

    }//End Main Method 

     public static void encryptId(int id){ 
     while (id > 1) { 
      int num4 = id % 10; 
      id /= 10; 
      int num3 = id % 10; 
      id /= 10; 
      int num2 = id % 10; 
      id /= 10; 
      int num1 = id % 10; 
      id /= 10; 

      num1 += 7; 
      num2 += 7; 
      num3 += 7; 
      num4 += 7; 

      num1 = num1 % 10; 
      num2 = num2 % 10; 
      num3 = num3 % 10; 
      num4 = num4 % 10; 

      int swap1, swap2, swap3, swap4; 
      swap1 = num3; 
      swap2 = num4; 
      swap3 = num1; 
      swap4 = num2; 

      System.out.print(swap1); 
      System.out.print(swap2); 
      System.out.print(swap3); 
      System.out.println(swap4); 

     } 
    } 
} 

我有3个问题。

  1. 我应该为每个数学运算创建一个方法吗? (今天的课程是方法)

  2. 如何从一个整数中分离数字,对它们执行数学运算,重新排列它们,然后将它们放回到一个整数中?

  3. 写这段代码的更简单的方法是什么? (我讨厌它的外观和表现如何)

感谢您的任何意见!

+0

没有使用数组,我想不出任何...如果你刚刚了解方法,你应该使用它们。 – PlasmaPower

回答

0

这里是你应该怎么做

检查字符串的长度,以确保它的长度4,使用的Integer.parseInt每个数字(String.subString(0),String.subString(1)等等...... 然后每个数字打电话给你的方法,通过10

随着四个结果进行最终的操作增加7和除法

0

使用方法也可以成为这样的一种方法;

public class Project5e { 

    public static void main(String[] args) { 

     // promt user for the 4 digit number 
     String userIdStr = JOptionPane.showInputDialog("Please enter your four digit user I.D."); 

     new Project5e().encryptId(userIdStr); 

    }// End Main Method 

    private int extract(String v, int i){ 
     return v.charAt(i)-48; //get the digit at i position (48 is ASCII value of '0') 
    } 

    private int transform(int v){ 
     v += 7;    //transform the digit 
     return v % 10; 
    } 

    private String swap(String r){ 
     return r.charAt(2) + "" + r.charAt(3)+ "" + r.charAt(0)+ "" + r.charAt(1); //swap digits 
    } 

    public void encryptId(String id) { 
     String r = ""; 
     for(int i = 0; i < 4; i++){ 
      int v = extract(id, i); 
      v = transform(v); 
      r += String.valueOf(v); 
     } 
     r = swap(r); 
     System.out.println(r); 
    } 
} 

有一种方法可以提取数字,另一种方法可以转换数字,最后还可以使用交换数字的方法。

希望它有帮助。

+0

谢谢eltabo。这绝对是我需要努力的。这有点凌驾于我的头上,我没有遵循所有的逻辑和技巧。 –