Saya mencoba membuat kode Caesar Cipher sebagai latihan di sekolah. Saya mengalami masalah di mana huruf x, y, dan z keluar sebagai tidak terdefinisi.

function txtcipher() {
  var txt = document.getElementById("txt").value;
  var txtlen = txt.length;
  var txtciphered = "";
  var alphabet = "abcdefghijklmnopqrstuvwxyz";
  for (x = 0; x < txtlen; x++) {
    for (y = 0; y < alphabet.length; y++) {
      if (txt[x] === alphabet[y]) {
        txtciphered += alphabet[y + 3];
      }
    }
  }
  document.getElementById("cpher").value = txtciphered;
  console.log(txtciphered);
}
<input id="txt" />
<button onclick="txtcipher()">Check</button><br />
<input type="text" id="cpher" readonly></input>

Bagaimana cara memperbaikinya?

-1
Rellars 30 Januari 2020, 16:14

2 jawaban

Jawaban Terbaik

Anda harus tetap berada dalam batas panjang larik alphabet larik

Dari pada

y + 3

Menggunakan

(y + 3) % alphabet.length
function txtcipher() {
  var txt = document.getElementById("txt").value;
  var txtlen = txt.length;
  var txtciphered = "";
  var alphabet = "abcdefghijklmnopqrstuvwxyz";
  for (x = 0; x < txtlen; x++) {
    for (y = 0; y < alphabet.length; y++) {
      if (txt[x] === alphabet[y]) {
        txtciphered += alphabet[(y + 3) % alphabet.length];
      }
    }
  }
  document.getElementById("cpher").value = txtciphered;
  console.log(txtciphered);
}
<input id="txt"  value="xyzabc"/>
<button onclick="txtcipher()">Check</button><br />
<input type="text" id="cpher" readonly placeholder="abcdef <-- xyzabc"></input>
1
yunzen 30 Januari 2020, 13:20

Anda baru saja keluar dari batasan array - di sini:

txtciphered += alphabet[y + 3];

Ketika y lebih besar dari alphabet.length - 3

1
m.antkowicz 30 Januari 2020, 13:21