2016-04-12 3 views
0

Mein Problem scheint einfach, ich versuche, eine Zeichenfolge in Android zu verschlüsseln.Einfache Encrypt Decrypt String mit Array in Android

What the program should do

Das Ziel des Programms ist, ein Wort oder einen Brief in textbox1 setzen, klicken Sie auf die Schaltfläche Verschlüsseln und TextBox2 sollte das Symbol in der gleichen Position in der zweiten Reihe des Briefes zeigen, dass Sie setzen wenn ich ein Symbol setzen und klicken Sie auf DECRYPT.

zum Beispiel schreibe ich letter A (array 1 [0])symbol $ (array 2 [0]) wenn ein Klick auf ENCRYPT Taste zeigen muss, muss den Brief zeigen, die in der Position des Arrays entspricht

Hilfe brauchen. Entschuldigung für Grammatik und bearbeiten Sie Frage, erstes Mal und kein englischer Sprecher, ich versuchte, es einfacher zu machen.

Arreglo Klasse, nur für declare 2-Arrays.

package PaqueteArreglo; 

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

Hauptaktivität

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

Sie sollten wahrscheinlich eine Art Karte wie eine HashMap verwenden, um Ihr Verschlüsselungszeichen dem passenden Entschlüsselungszeichen zuzuordnen. Auch ist es unklar, was das spezifische Problem ist, das Sie haben. Könnten Sie die Frage etwas abklären? –

+0

Vielen Dank für die Antwort, ich bearbeite die Frage für eine Erklärung einfacher, und ich weiß nicht zu verwenden (und zu diesem Zweck nicht brauchen) HashMap, ich brauche das Problem mit dieser Methode zu lösen, danke. –

+0

Bitte bearbeiten, um die 'Arreglo' Klasse anzuzeigen –

Antwort

1

Es gibt zwei Lösungen für Ihr Problem zwei anderen Ansatz:

1- Ihre definierte Struktur verwenden (die übrigens nicht optimiert ist) müssen Sie Legen Sie zwei verschachtelte Schleife für die Überprüfung:

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- Verwenden Sie viel bessere Datenstruktur wie HashMap:

ändern Arreglo auf die folgenden:

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

und schließlich tun, um die Verschlüsselung wie:

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

nun so, wie Sie Ihre Daten wie hinzufügen ändern

Die zweite Implementierung ist effizienter