2015-12-04 33 views
0

我希望有一個Java代碼。如果我們輸入的字符串"mnb"一個給定的字符串中使用2個主要的串像下面Java代碼加密一個給定的刺

s1 = "qwertyuiopasdfghjklzxcvbnm"; 
s2 = "mnbvcxzasdfghjklpoiuytrewq"; 

加密,然後將其與s2和相同的指數相比,在s1被添加3然後輸出將是"rty"但我沒有得到正確的輸出。

任何人都可以幫我解決這個問題嗎?

public static void main(String[] args){ 
    Scanner sc = new Scanner(System.in); 
    String s1 = "qwertyuiopasdfghjklzxcvbnm"; 
    String s2 = "mnbvcxzasdfghjklpoiuytrewq"; 
    String input,out = ""; 
    System.out.println("enter input string"); 
    input = sc.nextLine(); 
    for(int i=0;i<s2.length();i++){ 
     if(input.charAt(i)==s2.charAt(i)){ 
      out+=s1.charAt(i+3); 
     } 
     System.out.println(out); 
    } 
    sc.close(); 
} 
+1

我對不起,但我並不真正瞭解你想要達到的目標......指數3從哪裏來? – ParkerHalo

+0

如果我的輸入是「m」,那麼m用s2搜索,如果m在s2中找到1,那麼在s1中第一個索引是qq,在輸出第三個字母后 –

+0

好吧現在我想我知道你想做什麼。 .. – ParkerHalo

回答

0

你需要一個額外的循環來檢查哪些字符由比s2 string.Other匹配,你將不得不使用modulo操作,以避免ArrayIndexOutOfBound

試試這個

public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 
     String s1 = "qwertyuiopasdfghjklzxcvbnm"; 
     String s2 = "mnbvcxzasdfghjklpoiuytrewq"; 
     String input, out = ""; 
     System.out.println("enter input string"); 
     input = sc.nextLine(); 
     for (int i = 0; i < input.length(); i++) { 
      for (int j = 0; j < s2.length(); j++) { 
       if (input.charAt(i) == s2.charAt(j)) { 
        out += s1.charAt((j + 3)%26); 
       } 
      } 

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

UPDATE

正如@ ParkerHalo的評論指出,處理ArrayIndexOutOfBound,您可以使用modulo運營商這樣

out += s1.charAt((j + 3)%26); 
+0

得到了解決方案謝謝 –

+1

不,您不需要額外的循環...此代碼爲輸入'「q」'提供StringIndexOutOfBoundsException。 – ParkerHalo

2

你幾乎有解!問題是當你輸入s2的最後3個字符之一時,你必須使用模運算符(當位置大於25時,你將到達字符串的末尾,並且必須從開始處開始搜索!)

public static void main(String[] args) throws Exception { 
    Scanner sc = new Scanner(System.in); 
    String s1 = "qwertyuiopasdfghjklzxcvbnm"; 
    String s2 = "mnbvcxzasdfghjklpoiuytrewq"; 
    String input,out = ""; 
    System.out.println("enter input string"); 
    input = sc.nextLine(); 
    for (int i = 0; i < input.length(); i++) { 
     int position = s2.indexOf(input.charAt(i)); 
     position = (position + 3) % 26; 
     out = out + s1.charAt(position); 
    } 
    sc.close(); 
} 

爲了避免錯誤的用戶輸入,你應該檢查position如果是-1(如果字符不是在s2找到),並妥善處理這種情況(異常/ outprint +在迴路斷線)

+0

感謝您的幫助 –