ROT13文字列をユーザ入力量だけシフトしたい。ROT13文字列をJavaシフトする
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;
}
}
UPDATE:
この
は私が書いた私のコードです。このコードは、私が進展している方法です。 私はそれがROT13暗号化とすべてのものをプリントアウトしている http://pastebin.com/v2T1fxEj実際のシフトがまだ動作しません、私はちょうどそれをシフトする方法がわかりません。
も、私は文字列の入力下のmainメソッドで=のgetText(SC)「によってシフトする量を入力して」追加しようとすると、私はこの取得し終わる:
Enter your text to encrypt (!!! to quit): ERROR! String must not be empty!
Enter your text to encrypt (!!! to quit):
を私はなっていないのです
ペーストビンを使用しないでください。質問にあなたのコードを表示してください。この質問は、後に来てリンクが壊れている場合、他の人には役に立たないでしょう。 – nhouser9
よろしいですか?私はそれがより簡単だろうと思った。 – ConfusedCoder
[ROT-13関数in java?]の可能な複製?(http://stackoverflow.com/questions/8981296/rot-13-function-in-java) – Charles