ユーザーが入力した量だけ ROT13 文字列をシフトしたいと考えています。これはサンプル出力です:
Enter your text to encrypt (!!! to quit): abcdefghijklmnopqrstuvwxyz
Enter amount to shift text by: 3
ORIGINAL: abcdefghijklmnopqrstuvwxyz
ENCRYPTED: defghijklmnopqrstuvwxyzabc
ユーザーは、0 から 26 の間のシフト値を指定する必要があります。ユーザーがこの範囲外に出た場合、プログラムはユーザーに有効な値を入力するよう強制する必要があります。
Enter your text to encrypt (!!! to quit): the quick brown fox jumped over the lazy dog
Enter amount to shift text by: -3
ERROR! Shift must be non-negative!
Enter amount to shift text by: 33
ERROR! Shift must be no more than 26!
Enter amount to shift text by: 2
暗号化するテキストを入力してください (!!! 終了します): !!! さよなら!
これは私が書いた私のコードです:
import java.util.Scanner;
public class Lab08b
{
public static void main(String[] args)
{
Scanner sc = new Scanner (System.in);
String input = getText(sc);
int shift = getShift(sc);
if (input.equals("!!!"))
{
System.out.println("Goodbye!");
}
while (!input.equals("!!!"))
{
String encoded = rot13(input);
shiftMessage(input, shift);
displayResults(input, encoded);
input = getText(sc);
if (input.equals("!!!"))
{
System.out.println("Goodbye!");
}
}
}
private static int getShift (Scanner inScanner)
{
System.out.print("Enter amount to shift text by: ");
int shift = inScanner.nextInt();
if (shift < 0)
{
System.out.println("ERROR! Shift must be non-negative!");
System.out.print("Enter amount to shift text by: ");
shift = inScanner.nextInt();
}
else if (shift > 26)
{
System.out.println("ERROR! Shift must be non-negative!");
System.out.print("Enter amount to shift text by: ");
shift = inScanner.nextInt();
}
return shift;
}
private static String getText(Scanner inScanner)
{
System.out.print("Enter your text to encrypt (!!! to quit): ");
String original = inScanner.nextLine();
while (original.equals(""))
{
System.out.println("ERROR! String must not be empty!");
System.out.print("Enter your text to encrypt (!!! to quit): ");
original = inScanner.nextLine();
}
return original;
}
private static String rot13(String input)
{
String str = "";
for (int i = 0; i < input.length(); i++)
{
char ch = input.charAt(i);
if (ch >= 'A' && ch <= 'Z')
{
ch = (char) (ch + 13);
if (ch > 'Z')
{
ch = (char)(ch - 26);
}
}
else if (ch >= 'a' && ch <= 'z')
{
ch = (char)(ch + 13);
if (ch > 'z')
{
ch = (char)(ch - 26);
}
}
str = str + ch;
}
return str;
}
private static void displayResults(String inText, String encText)
{
System.out.print("+");
for (int i = 13 + encText.length(); i > 0; i--)
{
System.out.print("-");
}
System.out.println("+");
System.out.println("| ORIGINAL: " + inText + " |");
System.out.println("| ENCRYPTED: " + encText + " |");
System.out.print("+");
for(int i = 13 + encText.length(); i > 0; i--){
System.out.print("-");
}
System.out.println("+");
}
private static String shiftMessage(String input, int n)
{
for (int i = 0; i < input.length(); i++)
{
input = input.charAt(input.length()- n) + input.substring(0,input.length());
}
return input;
}
}
更新:このコードは私がどのように進んだかです。実際のシフトはまだ動作しません http://pastebin.com/v2T1fxEj
ROT13暗号化とすべてを印刷していますが、それをシフトする方法がわかりません。
また、メイン メソッドの String input = getText(sc) の下に「Enter amount to shift by」を追加しようとすると、次のようになります。
Enter your text to encrypt (!!! to quit): ERROR! String must not be empty!
Enter your text to encrypt (!!! to quit):
私はそれを得ることになっていない