-1

I coded this simple encryption program:

public static void main(String[] args) {
    int password = 123456789;
    int firstLayer = password / 58;
    int secondLayer = firstLayer * 23;
    int thirdLayer = secondLayer + 85;
    System.out.println(thirdLayer);

    int encryptedPassword = thirdLayer;
    int thirdLayerD = encryptedPassword - 85;
    int secondLayerD = thirdLayerD / 23;
    int firstLayerD = secondLayerD * 58;


    System.out.println(firstLayerD);

}

but I have a weird problem. After decrypting the password I get: 123456770

I was expecting to get the same password as the original, but I don't know what the problem is.

Bohemian
  • 389,931
  • 88
  • 552
  • 692
Trap Town
  • 5
  • 3
  • If you understand data types in Java, it seems like you could've easily figured this out with debugging. If you don't understand data types, you should probably read a textbook. [so] is not really a good substitute for either of those. – Bernhard Barker Aug 24 '17 at 17:06
  • [What does your step debugger tell you?](http://stackoverflow.com/questions/25385173/what-is-a-debugger-and-how-can-it-help-me-diagnose-problems) –  Aug 24 '17 at 17:20

2 Answers2

1

This is because 123456789 / 58 = 2128565,32759, this gets truncated to an int.

Dorian Gray
  • 2,781
  • 1
  • 8
  • 25
0

Integer division arithmetic results in truncation of any remainder.

Use double, then call Math.round() to produce an integer number again:

public static void main(String[] args) {
    int password = 123456789;
    double firstLayer = password / 58d;
    double secondLayer = firstLayer * 23;
    double thirdLayer = secondLayer + 85;
    double encryptedPassword = thirdLayer;

    double thirdLayerD = encryptedPassword - 85;
    double secondLayerD = thirdLayerD / 23;
    int firstLayerD = (int)Math.round(secondLayerD * 58);

    System.out.println(firstLayerD);
}

Output:

123456789
Bohemian
  • 389,931
  • 88
  • 552
  • 692