2016-04-12 9 views
0

私の問題は簡単だと思いますが、私はアンドロイドで文字列を暗号化しようとしています。Androidで配列を持つ単純な暗号化解読文字列

What the program should do

、単語やTextBox1テキストボックスに文字を入れているプログラムの目的は、ボタンの暗号化をクリックするとTextBox2をあなたが入れ文字の二番目の配列の同じ位置でシンボルを表示するようにすべきたとえば。

私はENCRYPTボタンをクリックして、私はシンボルを入れてDECRYPTをクリックするとヘルプが必要な場合、アレイ

の位置に相当し、文字を表示しなければならない場合letter A (array 1 [0])symbol $ (array 2 [0])を示さなければなりません書きます。申し訳ありませんが、文法や質問を編集する、初心者でも英語話者でもなく、私はもっと簡単にしようとしました。

Arregloクラスは、2つの配列を宣言するためのクラスです。

package PaqueteArreglo; 

public class Arreglo { 
public String [] encrypt = new String[3]; 
public String [] decrypt = new String[3]; 
} 

主な活動

package com.example.encrypt; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import PaqueteArreglo.Arreglo; 

public class MainActivity extends AppCompatActivity implements View.OnClickListener{ 

//Instance the class with the arrays 
PaqueteArreglo.Arreglo ins = new Arreglo(); 
public Button button1,button2; 
public EditText text1, text2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    initialize(); 

    ins.encrypt[0] = "a"; 
    ins.encrypt[1] = "b"; 
    ins.encrypt[2] = "c"; 

    ins.decrypt[0] = "$"; 
    ins.decrypt[1] = "%"; 
    ins.decrypt[2] = "&"; 

} 

private void initialize(){ 
    text1 = (EditText)findViewById(R.id.txtWord); 
    text2 = (EditText)findViewById(R.id.txtResult); 

    button1 = (Button)findViewById(R.id.btnEncrypt); 
    button1.setOnClickListener(this); 

    button2 =(Button)findViewById(R.id.btnDecrypt); 
    button2.setOnClickListener(this); 

} 

@Override 
public void onClick(View view) { 
    String word = String.valueOf(this.text1.getText()); 

    if (view.getId() == R.id.btnEncrypt) 
    { 
    String demo = ""; 
    int lon = 0; 
    lon = word.length(); 
    for (int i = 0; i < lon; i++) 
    { 
     if (ins.encrypt[i].equalsIgnoreCase(String.valueOf(word.charAt(i)))) 
     { 
      demo = demo + ins.decrypt[i]; 
      text2.setText(demo); 
     } 
    } 
    } 
} 
} 
+0

おそらくHashMapのようなマップを使用して、暗号化文字をそれに一致する復号化文字にマップする必要があります。また、特定の問題が何であるかは不明です。あなたは少し質問を明確にすることができますか? –

+0

答えをありがとう、私は説明をより簡単にするための質問を編集し、私は使用を知らない(とこの目的のために必要ない)HashMap、私はこのメソッドで問題を解決する必要があります、ありがとう。 –

+0

'Arreglo'クラスを表示するように編集してください –

答えて

1

二つの異なるアプローチを使用して、あなたの問題には、次の2つの解決策があります

1-あなたがする必要がある(方法によって最適化されていません)あなたの定義された構造を使用して

for (int i = 0; i < lon; i++) 
{ 
    for(int j = 0; j<ins.encrypt.length;j++) 
    { 
     if (ins.encrypt[j].equalsIgnoreCase(String.valueOf(word.charAt(i)))) 
     { 
      demo = demo + ins.decrypt[j]; 
     } 
    } 
} 

text2.setText(demo); 

2つの入れ子になったループを使用してチェックします。HashMap:今、あなたのようなあなたのデータを追加する方法に変更

public class Arreglo { 
    public HashMap<Character, Character> encrypt = new HashMap<>(); 
    public HashMap<Character, Character> decrypt = new HashMap<>(); 
} 

ins.encrypt.put('a','@'); 
ins.decrypt.put('@','a'); 
... 

をし、最終的に同じよう暗号化を行います。

を次のようにあなたのArregloを変更

2番目の実装がより効率的です

関連する問題