初学者Java逻辑错误:不确定我知道该算法该怎么做

时间:2014-04-23 04:37:17

标签: java

我有一个加密算法用于练习,但我不确定我是否正确编码。在加密方法中我遇到了麻烦。

我的算法如下(我引用): “将每个数字替换为余数之后(该数字加上7的总和)除以10。”

编辑:1234应该变成8901

我该怎么办?我在正确的轨道上吗?

import java.util.*;
    public class encrypt 
    {
      public static void main(String[] args)
      {
        int num;
        num = getnum();
        encrypt(num);
      }
      public static int getnum()
      {
        Scanner console = new Scanner(System.in);
        int num;
        do
        {
        System.out.println("Enter a number that has only four digits ");
        num = console.nextInt(); 
        }
        while (num < 1000 || num > 9999);
        return num;
      }
      public static int encrypt(int num)
      {
        int digit4 = num%10;
        num = num/10;
        int digit3 = num%10;
        num = num/10;
        int digit2 = num%10;
        num = num/10;
        int digit1 = num%10;
        num = num/10;
        digit4 = ((digit4 + 7)/10)%10;
        digit3 = ((digit3 + 7)/10);
        digit2 = ((digit2 + 7)/10);
        digit1 = ((digit1 + 7)/10);
        System.out.print(digit1+" "+digit2+" "+digit3+" "+digit4);
        return digit4;
      }
    }

1 个答案:

答案 0 :(得分:1)

在所有情况下,数字+7在7到16之间,所以为了获得余数,如果数字是10或更多,则减去10,即

if (digit4 >= 10) digit4 -= 10;
if (digit3 >= 10) digit3 -= 10;
if (digit2 >= 10) digit2 -= 10;
if (digit1 >= 10) digit1 -= 10;

你想要回归

digit1 * 1000 + digit2 * 100 + digit3 * 10 + digit4

而不仅仅是digit4。除此之外,使用for循环进行改进,以便它适用于大于9999的数字。