2017-02-19 7 views
0

私は奇妙な問題があります。私は別のSystem.out.printを収集し、プログラムの最後に一意のStringリターンを作成する必要があります。System.out.printを削除して一意の返信を返す方法

どうすればいいですか?

次のプログラムでは、 'シーザーの暗号' です:

public static String cipher(String input2, Integer number) { 
    String expression = input2; 
    int k = number; 
    int lowerBoundlc = 97; 
    int upperBoundlc = 122; 
    int lowerBounduc = 65; 
    int upperBounduc = 90; 
    for (int i = 0; i < expression.length(); i++) { 
     char c = expression.charAt(i); 
     int j = (int) c; 
     if ((lowerBoundlc <= j && j <= upperBoundlc) || (j == 45)) { 
      if (j == 45) { 
       System.out.print(Character.toString((char) j)); 
      } else { 
       int addk = j + k; 
       if (addk > upperBoundlc) { 
        int lowercase = addk % upperBoundlc; 
        int resultlc = lowerBoundlc + lowercase -1; 
        System.out.print(Character.toString((char) resultlc)); 
       } else { 
        System.out.print(Character.toString((char) addk)); 
       } 
      } 

     } else { 
      if ((lowerBounduc <= j && j <= upperBounduc) || (j == 45)) { 
       int addnewk = j + k; 
       if (addnewk > upperBounduc) { 
        int uppercase = addnewk % upperBounduc; 
        int resultuc = lowerBounduc + uppercase -1; 
        System.out.print(Character.toString((char) resultuc)); 
       } else { 
        System.out.print(Character.toString((char) addnewk)); 
       } 

      } 

     } 

    } 
    return null;  
} 

ありがとうございました。

+1

'StringBuilder'を使用して文字を連結します。 –

+0

@ElliottFrisch:提案していただきありがとうございます。私はそれをやった! – Clash

答えて

0

あなたは、次の手順を実行することにより、あなたの目標を達成することができます:
1.暗号方式の最初に空のStringBuilderオブジェクトを作成します(このオブジェクトはで返される最終Stringを形成した文字列を開催しますその方法)。
2(a)のsは上記パート1に記載さStringBuilderオブジェクトを表し、(b)は、この場合(以下で

System.out.print(Character.toString((char) x)); 

(xはint変数を表す)の形の各コード行を置き換え

s.append((char) x); 

3:得られた線がsに対するXのchar表現)を付加します。あなたのStringBuilderシーケンスが完了すると、以下のような方法(sが問題になっているStringBuilderオブジェクトである場合)とその配列のString表現を取得:

s.toString(); 

ここでは上記の方法を利用した暗号方式の修正版です:

public static String cipher(String input2, Integer number) { 
     StringBuilder builder = new StringBuilder(input2.length()); 
     int k = number; 
     int lowerBoundlc = 97; 
     int upperBoundlc = 122; 
     int lowerBounduc = 65; 
     int upperBounduc = 90; 
     for (int i = 0; i < input2.length(); i++) { 
      char c = input2.charAt(i); 
      int j = (int) c; 
      if ((lowerBoundlc <= j && j <= upperBoundlc) || (j == 45)) { 
       if (j == 45) { 
        builder.append((char) j); 
       } else { 
        int addk = j + k; 
        if (addk > upperBoundlc) { 
         int lowercase = addk % upperBoundlc; 
         int resultlc = lowerBoundlc + lowercase -1; 
         builder.append((char) resultlc); 
        } else { 
         builder.append((char) addk); 
        } 
       } 

      } else { 
       if ((lowerBounduc <= j && j <= upperBounduc) || (j == 45)) { 
        int addnewk = j + k; 
        if (addnewk > upperBounduc) { 
         int uppercase = addnewk % upperBounduc; 
         int resultuc = lowerBounduc + uppercase -1; 
         builder.append((char) resultuc); 
        } else { 
         builder.append((char) addnewk); 
        } 
       } 
      } 
     } 
     return builder.toString();  
    } 
0

厳密にCharacter.toString((char)変数)を印刷する代わりに、+ =または代わりにStringBuilderクラスを使用してこれらの文字列を追加できます。

この例では、一番最後に文字列sを返すことができます一緒にすべての文字列を連結した後

String s = Character.toString((char) j); 
System.out.print(s); 

String p = Character.toString((char) resultC); 
s += p; 
System.out.print(p); 

だろう。

0
public static String cipher(String input2, Integer number) { 

    String expression = input2; 
    int k = number; 
    int lowerBoundlc = 97; 
    int upperBoundlc = 122; 
    int lowerBounduc = 65; 
    int upperBounduc = 90; 

    StringBuilder result = new StringBuilder(); 

    for (int i = 0; i < expression.length(); i++) { 
     char c = expression.charAt(i); 
     int j = (int) c; 

     if ((lowerBoundlc <= j && j <= upperBoundlc) || (j == 45)) { 
      if (j == 45) { 
       StringBuilder line = new StringBuilder(Character.toString((char) j)); 
       result.append(line); 
      } else { 
       int addk = j + k; 
       if (addk > upperBoundlc) { 
        int lowercase = addk % upperBoundlc; 
        int resultlc = lowerBoundlc + lowercase - 1; 
        StringBuilder appendresultlc = new StringBuilder(Character.toString((char) resultlc)); 
        result.append(appendresultlc); 
       } else { 
        StringBuilder appendaddk = new StringBuilder(Character.toString((char) addk)); 
        result.append(appendaddk); 
       } 
      } 

     } else { 
      if ((lowerBounduc <= j && j <= upperBounduc) || (j == 45)) { 
       int addnewk = j + k; 
       if (addnewk > upperBounduc) { 
        int uppercase = addnewk % upperBounduc; 
        int resultuc = lowerBounduc + uppercase - 1; 
        StringBuilder appendresultuc = new StringBuilder(Character.toString((char) resultuc)); 
        result.append(appendresultuc); 
       } else { 
        StringBuilder appendaddnewk = new StringBuilder(Character.toString((char) addnewk)); 
        result.append(appendaddnewk); 

       } 

      } 

     } 

    } 
    return result.toString(); 
} 
0

System.out.println()を使用して、他のソースにメッセージを印刷できます。これを行うには、System.setOut(PrintStream p)を使用して標準出力を再割り当てする必要があります。 Systemクラスのメソッド

必要に応じて、System.setOut()を設定します。

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
PrintStream ps = new PrintStream(baos); 

PrintStream old = System.out; 

// use your special stream 
System.setOut(ps); 

// All System.out.Println will goes to special stream 
System.out.println("This will be written to the string!"); 

System.out.flush(); 
System.setOut(old); 

String content = new String(baos.toByteArray(), StandardCharsets.UTF_8); 
System.out.println("Here: " + content); 
0

この問題の解決策は複数あります。しかし、このソリューションを使用してコードの最小限の変更でこの問題を解決することができます...

まず最初に、デフォルトの出力ストリームをリダイレクトしてからロジックを実行してから、出力をデフォルトの出力ストリームに出力する必要があります。 はただ、これであなたの主なメソッドを更新..

public static void main(String arg[]){ 
    OutputStream os=System.out; 
    //Create piped streams 
    PipedInputStream pis=new PipedInputStream(2000); 
    PipedOutputStream pos=new PipedOutputStream(pis); 
    //Change default output stream 
    System.setOut(pos); 
    //Logic.. 
    cipher("stack",4); 
    //Change default output stream to console 
    System.setOut(os); 
    //Read output from PipedOutput Stream & print on console 
    Scanner sc=new Scanner(System.in); 
    String ct=sc.next(); 
    System.out.print(ct); 
} 

今、あなたはメソッド暗号では標準出力ストリームに印刷するものは何でもコンソール上に直接印刷されていません。

メソッドcipherを変更せずに、プログラムの出力をファイルに書き込むこともできます。

0

あなたは、単にその文字列を使用して連結(「+」演算子)&を使用して文字列への回答を追加することができます。 String Builderを使用してパフォーマンスを向上させることができます。

関連する問題