2017-10-31 10 views
1

だから私はABabを持っていて、AACacと置き換え、aCAca....に置き換えたいとします。私が試したものからの私の出力はとなるはずですACacBCAcab私はこれをバイパスする方法がわかりません。これは、入力されたAcacの小文字のaも変わることがわかります。 2がある理由2つの文字列を1つの文字列に入力する方法はありますか?

import java.util.*; 
public class Nails 
{ 
    public static void main(String[] args) 
    { 
     Scanner i = new Scanner(System.in); 
     String[][] comms = { { "ACac", "CAca" }, { "ADad", "DAda" }, { "AEae", "EAea" }, { "AFaf", "FAfa" }, 
     { "AGag", "GAga" }, { "AHah", "HAha" }, { "AIai", "Iaia" }, { "AJaj", "JAja" }, { "AKak", "KAka" }, 
     { "ALal", "LAla" }, { "AMam", "MAma" }, { "ANan", "NAna" }, { "AOao", "OAoa" }, { "APap", "PApa" }, 
     { "AQaq", "QAqa" }, { "ARar", "RAra" }, { "ASas", "SAsa" }, { "ATat", "TAta" }, { "AUau", "UAua" }, 
     { "AVav", "VAva" }, { "AWaw", "WAwa" }, { "AXax", "XAxa" }, { "AYay", "YAya" }, { "AZaz", "ZAza" } }; 

     String Master = "ABab"; 
     String S = Master; //Slave String 
     String Tmp = S; 
     System.out.println("Amount of Nails: "); 
     int N = i.nextInt(); //Nails 
     if(N < 2) 
     { 
      System.out.println("Sorry, You Must input a number Greater than or Equal to 2"); 
     } 
     if(N == 2) 
     { 
      System.out.println(Master); 
     } 
     else 
     { 
      for(int c = 0; c < N - 2; c++) //C for Counter, subtracting 2 because method wont run if it is <= 2 and 'Comms' starts on 0 which would be 3 Nails 
      { 
       System.out.println(S); 
       S = S.replace("A", Comms[c][0]); 
       S = S.replace("a", Comms[c][1]); 
       System.out.println(S); 
      } 
     } 
    } 
} 

小文字が大文字のコンポジットを表す:私はあなたがhahaを見ることができるようにZにこれらのすべての方法まで入力できるようにしたい、ここに私のコードです各1のエントリに "釘"が追加されました。私はこのパズルの数式ジェネレータを作成できるようにこのプログラムを作っています: Nail Puzzle。ビデオ制作者は、それが役立つ場合は、数学のいくつかについても説明します。おかげさまで

+0

私にとっては、これはタグのいずれかに関連する質問ではなく、適切なアルゴリズムを見つけることのちょうど問題ではないので、質問のタイトルは明確ではありません。 –

+0

@Stephan Hernmann - 私は、とにかく適切なタグを選択する担当者を持っていない、私は日食で働いていた、Javaをやっていた、文字列のヘルプが必要でした、なぜ私は正規表現を置く覚えていないが、パズルで。あなたは正しいです私はアルゴリズムを見つける必要があり、私はコードで私の知識が非常に基本的であるため、これはプリムと適切なタイトルを作るためにこれを理解する方法を知りません –

答えて

3

プレースホルダを使用できます。文字をプレースホルダに置き換え、プレースホルダを実際の文字列に置き換えます。

import java.util.*; 

public class Q47028607 { 
    public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 
    String[][] comms = { { "ACac", "CAca" }, { "ADad", "DAda" }, { "AEae", "EAea" }, { "AFaf", "FAfa" }, 
     { "AGag", "GAga" }, { "AHah", "HAha" }, { "AIai", "Iaia" }, { "AJaj", "JAja" }, { "AKak", "KAka" }, 
     { "ALal", "LAla" }, { "AMam", "MAma" }, { "ANan", "NAna" }, { "AOao", "OAoa" }, { "APap", "PApa" }, 
     { "AQaq", "QAqa" }, { "ARar", "RAra" }, { "ASas", "SAsa" }, { "ATat", "TAta" }, { "AUau", "UAua" }, 
     { "AVav", "VAva" }, { "AWaw", "WAwa" }, { "AXax", "XAxa" }, { "AYay", "YAya" }, { "AZaz", "ZAza" } }; 
    String master = "ABab"; 
    System.out.println("Amount of Nails: "); 
    int N = scanner.nextInt(); 
    if (N < 2) { 
     System.out.println("Sorry, You Must input a number Greater than or Equal to 2"); 
    } else if (N == 2) { 
     System.out.println(master); 
    } else { 
     for (int c = 0; c < N - 2; c++) { 
     System.out.println(master); 
     master = master.replace("A", "$1"); 
     master = master.replace("a", "$2"); 
     master = master.replace("$1", comms[c][0]); 
     master = master.replace("$2", comms[c][1]); 
     System.out.println(master); 
     } 
    } 
    scanner.close(); 
    } 
} 
0

私はディーン徐ような何かをしましたが、私はlitteralyちょうどそれが笑そうここに私の終了コードは他人を変更した後、文字を変更するので考えた:

import java.util.*; 
public class Nails 
{ 
    public static void main(String[] args) 
    { 
     Scanner i = new Scanner(System.in); 
     String[][] Comms = {{"AC1c", "CAc1"}, {"AD1d", "DAd1"}, {"AE1e", "EAe1"}, {"AF1f", "FAf1"}, {"AG1g", "GAg1"}, {"AH1h", "HAh1"}, {"AI1i", "I1i1"}, {"AJ1j", "JAj1"}, {"AK1k", "KAk1"}, {"AL1l", "LAl1"}, {"AM1m", "MAm1"}, {"AN1n", "NAn1"}, {"AO1o", "OAo1"}, {"AP1p", "PAp1"}, {"AQ1q", "QAq1"}, {"AR1r", "RAr1"}, {"AS1s", "SAs1"}, {"AT1t", "TAt1"}, {"AU1u", "UAu1"}, {"AV1v", "VAv1"}, {"AW1w", "WAw1"}, {"AX1x", "XAx1"}, {"AY1y", "YAy1"}, {"AZ1z", "ZAz1"}}; 
     String Master = "ABab"; 
     String S = Master; //Slave String 
     String Tmp = S; 
     System.out.println("Amount of Nails: "); 
     int N = i.nextInt(); //Nails 
     if(N < 2) 
     { 
      System.out.println("Sorry, You Must input a number Greater than or Equal to 2"); 
     } 
     if(N == 2) 
     { 
      System.out.println(Master); 
     } 
     else 
     { 
      for(int c = 0; c < N - 2; c++) //C for Counter, subtracting 2 because method wont run if it is <= 2 and 'Comms' starts on 0 which would be 3 Nails 
      { 
       S = S.replace("A", Comms[c][0]); 
       S = S.replace("a", Comms[c][1]); 
       S = S.replace("1", "a"); 
      } 
      System.out.println(S); 
     } 
    } 
} 
+0

しかし、私は私が思ったTMP文字列を削除することができますそれが必要になるだろう –

0

提案::利用StringBuilderの代わりに文字列の文字列に対して複数の操作を行っているので、パフォーマンスとメモリの使用に影響します。 StringBuilderを使用すると、パフォーマンスが向上します。

+0

私はそれを把握することができない場合、私はそれをショットを与える悪い、男に感謝 –

関連する問題