为什么它返回负数(加密的密码)?

问题描述 投票:0回答:1

嗨,这是我第一次使用这个网站。 我不知道为什么当我运行程序时它返回负数。我有 8.2 Netbeans ver idk 如果这与此有关 事情应该是这样的。

示例运行1:

Enter your key: 2
Enter your 5-Digit Pin Code: 12345
The Encrypted Pin is: 76543
Enter your 5-Digit Pin Code: 11220
The Encrypted Pin is: 24433
Enter your 5-Digit Pin Code: 10000
The Encrypted Pin is: 22223
Enter your 5-Digit Pin Code: 9
Thank you !

示例运行 2:

Enter your key: 6
Your key should be an integer from 1 to 4

这是我的代码

import java.util.Scanner;

public class JavaApplication13 {

    
    public static void main(String[] args) {
        
        


        Scanner scan = new Scanner(System.in);

        System.out.print("Enter your key:");
        int key = scan.nextInt();
        
        int pincode, digit, encrypteddigit,encryptedpin=0;
        
        if (key >= 1 && key <= 4) {

            do {
                System.out.print("Enter your 5-Digit pin code: ");
                pincode = scan.nextInt();

                
                if (pincode >= 10000 && pincode <= 99999) {
                    
                    while (pincode> 0) {
                        
                        
                        
                        digit = pincode % 10;
                       
                        encrypteddigit = (digit + key)%10;
                        encryptedpin= encryptedpin*10+encrypteddigit;
                        
                        pincode /= 10;}
                        System.out.println("The encrypted pin is: "+ encryptedpin );
                       
                    
                } else {
                    System.out.println("thank you!");
                    break;
                }

            } while (true);

        } else {
            System.out.println("Your key should be an integer between 1 to 4");
        }

        
    }
}

这是我运行程序时的结果

run:
Enter your key:2
Enter your 5-Digit pin code: 12345
The encrypted pin is: 76543
Enter your 5-Digit pin code: 22007
The encrypted pin is: -935542348   **(why is it giving this?)**
Enter your 5-Digit pin code: 9
thank you!
BUILD SUCCESSFUL (total time: 24 seconds)
java
1个回答
0
投票

您不会为下一个 5 位 PIN 码迭代重置

encryptedpin
变量。当您按如下方式调整代码时:

System.out.println("encrypted pin before: "+encryptedpin);
encryptedpin= encryptedpin*10+encrypteddigit;
System.out.println("encrypted pin after: "+encryptedpin);

并使用输入运行第一次迭代

12345
,您将得到以下输出:

Enter your key:2
Enter your 5-Digit pin code: 12345
encrypted pin before: 0
encrypted pin after: 7
encrypted pin before: 7
encrypted pin after: 76
encrypted pin before: 76
encrypted pin after: 765
encrypted pin before: 765
encrypted pin after: 7654
encrypted pin before: 7654
encrypted pin after: 76543
The encrypted pin is: 76543
Enter your 5-Digit pin code:

但是当您输入下一个 5 位 PIN 码时,您将使用上一个最后加密的 PIN 值。您会在获得的附加输出中注意到这一点:

Enter your key:2
Enter your 5-Digit pin code: 12345
encrypted pin before: 0
encrypted pin after: 7
encrypted pin before: 7
encrypted pin after: 76
encrypted pin before: 76
encrypted pin after: 765
encrypted pin before: 765
encrypted pin after: 7654
encrypted pin before: 7654
encrypted pin after: 76543
The encrypted pin is: 76543
Enter your 5-Digit pin code: 11220
encrypted pin before: 76543          <-- no reset here
encrypted pin after: 765432
encrypted pin before: 765432
encrypted pin after: 7654324
encrypted pin before: 7654324
encrypted pin after: 76543244
encrypted pin before: 76543244
encrypted pin after: 765432443
encrypted pin before: 765432443
encrypted pin after: -935610159      <-- integer overflow
The encrypted pin is: -935610159
Enter your 5-Digit pin code:

最终,您将遇到整数溢出,请参阅什么是整数溢出错误?

解决方案是在下一个 5 位 pin 码迭代之前调用

encryptedpin=0
,因此它会在
0
处重新启动。

© www.soinside.com 2019 - 2024. All rights reserved.