-1

編集:コードを少し変更しました。綺麗にしてみました…

わかりました、私はJavaの完全な初心者です。メッセージ内の文字を一定量シフトする必要がある場合、CaesaerCipher を作成する必要があります (例: シフト 1 = A が B になり、B が C になるなど。シフト 2 = A->C、B->D、等。)

私は非常に多くの方法を試しましたが、まったくどこにも行きません。何を試せばいいのかわからない。ヘルプ?

import java.util.*;
import java.io.*;

public class CaesarCipher {

  public static void main(String[] args)
    throws FileNotFoundException, IOException {


    System.out.println("Welcome to CaesarCipher");
    System.out.print("Enter 1 to encipher, or 2 to decipher (-1 to exit): " );
    Scanner console = new Scanner(System.in);
    int i = console.nextInt();
    if (i == -1) {
      System.out.print("DONE!");
    //repeat question encipher/decipher/quit until choose quit
    }

    if (i == 1) {
      System.out.println();
      System.out.print("What shift should I use? ");
      int j = console.nextInt();
      System.out.println();
      System.out.print("What is the input file name? ");
      caesarEncipher();
    if (i == 1) { //from answer to encipher, decipher, or exit
      System.out.println(strLine);
      //send to String caesarDecipher
      //?????????????
    }
//    if (i == 2) { //from answer to encipher, decipher, or exit
      //send to String caesarEncipher
      //?????????????
//    }

      System.out.print("What is the output file name? ");
      String fileName = new Scanner(System.in).nextLine();
      //File file = new File( fileName );
//      fstream = new FileInputStream("/Users/steph/Desktop/Programming/!6 Problem Set TUES/PartB/6/cipher.txt");
         //change (".txt") to -fileName- ???
      //File file = new File( fileName );
//      while ((strLine = br.readLine()) != null)   {
//      System.out.println (strLine);
    }
  }

public static String caesarEncipher (int k)
  throws FileNotFoundException, IOException {

      //input file name code...
      //String fileName = scanner.nextLine();

      FileInputStream fstream = new FileInputStream("/Users/steph/Desktop/Programming/!6 Problem Set TUES/PartB/6/cipher.txt");
      DataInputStream in = new DataInputStream(fstream);
      BufferedReader br = new BufferedReader(new InputStreamReader(in));
    String strLine;
    while ((strLine = br.readLine()) != null)   {
      System.out.println (strLine);
    }
    in.close();
      System.out.println();


    int shiftKey = Integer.parseInt(k[1]);
    shiftKey = shiftKey % 26;  

      String cipherText = ""; 

      for (k=0; k<strLine.length(); k++){ 

         int asciiValue = (int) strLine.charAt(k); 
         if (asciiValue < 65 || asciiValue > 90){ 
            cipherText += strLine.charAt(k); 
            continue; 
         } 

         int basicValue = asciiValue - 65; 
         int newAsciiValue = 65 + ((basicValue + shiftKey) % 26)  ; 
         cipherText += (char) newAsciiValue; 

       } 

       System.out.print(cipherText);              

    in.close();
      System.out.println();
}
}

    //ignore any character that is not an uppercase alphabetic!!!!!!!!!  

//  public static String caesarDecipher (String input, int shift) {
    //reverse process to decipher
    //go back to what shift (line 11-12): j
    //make it -inputted number
    //ignore any character that is not an uppercase alphabetic!!!!!!!!!  
//  }

//  public static String alphabet (?) {
//    Iterator<String> abc = new Abc<Integer>()??;
    //list [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, Y, Z]
    //rotate(list, distance)

編集:問題は、私がスターを付けた場所です。k を配列にする必要があります。残りのコードを台無しにしないでそれを行う方法がわかりません。学習に関しては、このすべてのコードで十分だと思うでしょう。BBCode (何もない) しか知らなかった私は、これになりました。私は心理学専攻です。私の脳はこのようには機能しません。楽しいのですが、壁にぶち当たります。

Edit2:正確なエラーは「配列が必要ですが、intが見つかりました」です

4

1 に答える 1

1

StringBuilder を使用してこの実装を試してください。何度も変更される文字列専用に作成されたクラスです。
編集済み:また、文字列を文字配列に変換する方がよいでしょう。とにかく文字ごとに処理しているためです。

StringBuilder cipherText = new StringBuilder(); 
char[] letters = strLine.toCharArray();

for (k=0; k < letters.length; k++){ 

     int asciiValue = (int) letters[k]; 
     if (asciiValue < 65 || asciiValue > 90){ 
        cipherText.append( letters[k] );
        continue; 
     } 

     int basicValue = asciiValue - 65; 
     int newAsciiValue = 65 + ((basicValue + shiftKey) % 26)  ; 
     cipherText.append( (char) newAsciiValue );

} 

System.out.print( cipherText.toString() );
于 2012-08-06T18:06:48.653 に答える