到达范围末尾时如何在范围内循环数值
How to loop a numerical value in a range when reaching the end of the range
我正在尝试创建一个基本的加密程序,将字符值转换为数字形式,添加 "key",然后将它们转换回字符形式,从而对单词进行加密。
但是我不知道如何使数值大于或等于 90(字符 Z),循环回到 65(字符 A)。
public class Encode {
/**
* Main method - this does not need to be changed at all.
*/
public static void main(String[] args) {
testing();
userInteraction();
}
/**
* This method is used to test the encrypt method.
*/
public static void testing() {
String testMessage1 = "test";
int testKey1 = 11;
String result = encrypt(testMessage1, testKey1);
System.out.println("Encrypted result: "+result);
}
/**
* This method changes each character in a String to a
* different character based on the key passed in as
* an integer. The new String created by the encryption
* process is returned.
*
* @param message the String to be encoded
* @param key the integer value used for encryption
* @return a new encoded String
*/
public static String encrypt(String message, int key) {
System.out.println("encoding: "+message+", with key: "+key);
String encodedMessage = "";
message=message.toUpperCase();
int length = message.length();
for(int i=0;i<length;i++)
{
int characterValue = (int)message.charAt(i);
characterValue = characterValue + key;
if(characterValue>90)
{
characterValue = (65 + key ); // <---- What needs to go here? In order to make value loop back to A.
}
char myChar = (char)characterValue;
encodedMessage=encodedMessage+myChar;
}
return encodedMessage;
}
首先让我们先说您的加密不明确。那个蜜蜂说,将 characterValue = (65 + key );
更改为 characterValue = ((characterValue - 90) + 65);
此外,您在 characterValue>90
.
上添加了两次密钥
好吧,让我再举例说明一下。
在 characterValue = characterValue + key;
行中,您已经将密钥添加到字母中,因此我将其从 if
中的代码中删除。
我认为这部分不需要示例。
下一部分,求和本身:
假设有人键入 AZTEST,键为 11,结果应该是(如果大于 90,则添加键并重新开始):LLFPEF
A(65):(76)L
Z(90):(101->76)L
T(84):(95->70)F
E(69):(80)P
S(83):(94->69)E
T(84):(95->70)F
以'S'为例,我们有83 + 11 = 94。94大于90,所以我们要做的是:首先,我们找到它超过多少(94 - 90 = 4).现在我们有了这个数字,我们只需要重新开始计数。 A=65,所以65+4=69。 69 = E.
问题是 Z 将变得与另一个值相同。我看到Z和A唯一不同的密钥,在这种情况下,密钥=0,但加密会被破坏,因为原始文本没有变化。
我正在尝试创建一个基本的加密程序,将字符值转换为数字形式,添加 "key",然后将它们转换回字符形式,从而对单词进行加密。
但是我不知道如何使数值大于或等于 90(字符 Z),循环回到 65(字符 A)。
public class Encode {
/**
* Main method - this does not need to be changed at all.
*/
public static void main(String[] args) {
testing();
userInteraction();
}
/**
* This method is used to test the encrypt method.
*/
public static void testing() {
String testMessage1 = "test";
int testKey1 = 11;
String result = encrypt(testMessage1, testKey1);
System.out.println("Encrypted result: "+result);
}
/**
* This method changes each character in a String to a
* different character based on the key passed in as
* an integer. The new String created by the encryption
* process is returned.
*
* @param message the String to be encoded
* @param key the integer value used for encryption
* @return a new encoded String
*/
public static String encrypt(String message, int key) {
System.out.println("encoding: "+message+", with key: "+key);
String encodedMessage = "";
message=message.toUpperCase();
int length = message.length();
for(int i=0;i<length;i++)
{
int characterValue = (int)message.charAt(i);
characterValue = characterValue + key;
if(characterValue>90)
{
characterValue = (65 + key ); // <---- What needs to go here? In order to make value loop back to A.
}
char myChar = (char)characterValue;
encodedMessage=encodedMessage+myChar;
}
return encodedMessage;
}
首先让我们先说您的加密不明确。那个蜜蜂说,将 characterValue = (65 + key );
更改为 characterValue = ((characterValue - 90) + 65);
此外,您在 characterValue>90
.
好吧,让我再举例说明一下。
在 characterValue = characterValue + key;
行中,您已经将密钥添加到字母中,因此我将其从 if
中的代码中删除。
我认为这部分不需要示例。
下一部分,求和本身:
假设有人键入 AZTEST,键为 11,结果应该是(如果大于 90,则添加键并重新开始):LLFPEF
A(65):(76)L
Z(90):(101->76)L
T(84):(95->70)F
E(69):(80)P
S(83):(94->69)E
T(84):(95->70)F
以'S'为例,我们有83 + 11 = 94。94大于90,所以我们要做的是:首先,我们找到它超过多少(94 - 90 = 4).现在我们有了这个数字,我们只需要重新开始计数。 A=65,所以65+4=69。 69 = E.
问题是 Z 将变得与另一个值相同。我看到Z和A唯一不同的密钥,在这种情况下,密钥=0,但加密会被破坏,因为原始文本没有变化。