First, let's look at how we're going to use the decode method. It's going to
return a string with the decoded message. And it doesn't need any arguments.
So, in the decoder tester, we want to print out the result of decoder.decode.
The decoder was made with the coded messages string already in it. So we don't
need to pass that string in again. Now, back to the decoder itself. We need to
write a for loop that reads every 10th letter, starting with the 0th one. Since
we're reading a string, we want to go as long as the index is less than the
length of the string. EncodedMessage is the string that we're reading. And
instead of incrementing by one at a time I'm going to increment i by 10 every
time, so that we only see every tenth letter. Inside the loop, the part that I
want to repeat is reading the ith letter, and adding it to decoded message. So
decoded message will be itself Plus, encodedMessage.substring from i to i plus
1. Remember, this is how we got one letter out of a longer string. Let's see if
this works. Looks like there are more secret messages in here. If you're
curious what they are, I guess you'll have to try starting at different
indices. Let me talk for a moment about a couple of bugs that you might have
encountered. If you accidentally wrote less than or equals to, right here like
this. You might encounter a string out of bounds exception. When you try to
access too high of an index in encodedMessage. A string index out of bounds
exception is a runtime error. That particular runtime error is nice, because it
stops the program and tells you, you tried to access a value that doesn't
exist. Which is much better than silently messing up your program's result. You
could correctly, though, a little clumsily write the condition as, i is less
than or equal to encodedMessage.length(), minus 1. That would work, but I don't
think it's as clean. When you iterate over a string, it's best, to go, as long,
as i, is less than, the length.
Primero, observemos como vamos a utilizar el método decodificación. Va a
devolver una Cadena con un mensaje decodificado. No necesita argumento alguno.
Así que, en el Probador Decodificador, queremos imprimir el resultado de la decodificador.decodificar.
El decodificador se hizo con la cadena de mensajes decodificados en ella. Así que no
necesitamos pasar esa cadena otra vez. Ahora, de vuelta al propio decodificador. Necesitamos
escribir un bucle for que lea cada décima letra, iniciando con la cero. Ya que
estamos leyendo una cadena, queremos ir tan lejos como el índice sea menos que la
longitud de la cadena, mensajeCodificado es la cadena que estamos leyendo. Y
en lugar de incrementar por uno a la vez voy a incrementar i por10 cada
vez, de tal manera que sólo veamos cada décima letra. Dentro del bucle, la parte que
quiero repetir está leyendo la letra i’ésima, y agregándola a mensajeDecodificado. Así que
mensajeDecodificado será sí mismo más mensajeCodificado.subcadena de i a i más
1. Recuerda, así es como obtuvimos una letra de una cadena más larga. Veamos si
esto funciona. Parece que hay más mensajes secretos aquí. Si tienes curiosidad
de lo que son, creo que tendrás que iniciar en
diferentes índices. Déjame hablarte por un momento sobre un par de errores que podrías haber
encontrado. Si accidentalmente escribes menos que o igual a, aquí como
accesar un índice demasiado alto en mensajeCodificado. Una cadena exepción índice fuera de límites
es un error de ejecución. Ese error de ejecución en específico es agradable porque
detiene el programa y te dice que has intentado acceder a un valor que no
existe, que es mucho mejor que en silencio estropear el resultado de tu programa. Podrías
corregirlo, aunque de manera un poco torpe, escribe la condición como i es menor
que o igual a mensajeCodificado.longitud(), menos 1. Eso podría funcionar, pero no
creo que sea tan limpio. Al iterar sobre una cadena que es mejor ir: mientras que
i sea menor que la longitud.
Voyons d'abord comment nous allons
utiliser la méthode decode.
Il renverra une chaîne avec
le message décodé
et il n'a pas besoin d'arguments.
Ainsi, dans DecoderTester,
nous voulons imprimer le résultat
de decoder.decode.
Le décodeur a été fait avec la chaîne
de messages codés déjà dedans.
Nous ne devons pas
retransmettre cette chaîne.
Maintenant, revenons au décodeur lui-même.
Nous devons écrire une boucle for
qui lit chaque 10ième lettre
en commençant par la 0ème.
Comme nous lisons une chaîne,
nous voulons aller tant
que l'index est inférieur à
la longueur de la chaîne.
EncodedMessage est
la chaîne que nous lisons.
Au lieu d'incrémenter un
à la fois je vais incrémenter i
par 10 à chaque fois, de sorte que
nous ne voyons qu'une lettre sur dix.
A l'intérieur de la boucle,
la partie que je veux répéter
est la lecture de la lettre i
et son ajout a decodedMessage.
Ainsi, decodedMessage sera
égal lui-même plus
encodedMessage.substring de i à i + 1.
Rappelez-vous, c'est ainsi que nous avons
obtenu une lettre d'une chaîne plus longue.
Voyons si cela fonctionne.
On dirait qu'il y a plus
de messages secrets ici.
Si vous voulez les découvrir,
Vous devrez
essayer en commençant
à différents indices.
je vais parler un instant de bugs
que vous auriez pu rencontrer.
Si vous avez accidentellement
écrit <= ici, comme ça.
Vous pourriez rencontrer
une exception de chaîne hors limites
lorsque vous essayez d'accéder un index
trop haut dans encodedMessage.
Une exception d'index de chaîne
hors limites est une erreur d'exécution.
Cette erreur d'exécution est bien
car elle arrête le programme et
dit que vous avez essayé d'accéder
à une valeur qui n'existe pas
ce qui est mieux que de gâcher
en silence le résultat de votre programme.
Vous pourriez cependant écrire un peu
maladroitement la condition en tant que
i est inférieur ou égal à
encodedMessage.length () - 1.
Ça marcherait, mais je ne pense
pas que ce soit aussi propre.
Lorsque vous itérez sur une chaîne,
il est préférable d'y aller,
aussi longtemps que i
est inférieure à la longueur.
まずdecodeメソッドを
どのように使うか見てみましょう
このメソッドは解読したメッセージの入った
Stringオブジェクトを返します 引数は不要です
ではdecoder.decodeメソッドの実行結果を
DecoderTesterクラス内で出力したいと思います
decoderオブジェクトはすでに暗号化された
メッセージの文字列と共に生成されており
文字列を再度引き渡す必要はありません
ではDecoderクラスに戻りましょう
ゼロ番目から始めて10番目ごとの文字を読む
forループを書く必要があります
文字列を解読しているのでインデックスが
その長さに満たない限り処理を繰り返します
変数encodeMessageは解読中の文字列です
変数iは毎回1ずつではなく
10ずつインクリメントするので
10番目ごとの文字だけを見ることができます
ループの中で繰り返すことは
i番目の文字を読むことと
その文字を変数decodedMessageに付け足すことです
そしてdecodedMessage = encodedMessage +
encodedMessage.substring(i,i+1)となります
覚えておいてください これが
より長い文字列から1文字を取り出す方法です
うまくいくか見てみましょう
さらに秘密のメッセージがあるようです
それを知るには別のインデックスで始めます
起こり得るいくつかのバグについて
少しお話ししましょう
もし間違ってここをこのように
小なりイコールと書いてしまうと
文字列の範囲外例外が発生するかもしれません
それは変数encodedMessageの
長さより大きいインデックスに
アクセスしようとした時に発生します
範囲外例外はランタイムエラーです
プログラムを止めて
存在しない値にアクセスしていると警告します
警告もなくプログラムの結果が
めちゃくちゃになるよりずっといいです
正しいけれど少し不格好な条件式を
書くこともできます
例えばi <= encodedMessage.length()
- 1です これでも機能しますが
あまりすっきりしていません
文字列を反復処理する場合は
i < encodedMessage.Length()
とするのがベストです
우선, decode 메소드를 어떻게 사용할지 생각해 봅시다. 이 메소드는 해독된
메시지를 리턴 할겁니다. 그리고 매개변수는 필요 없습니다.
decoder 테스터를 보면, docoder.decode의 결과를 출력해야 합니다.
decoder 테스터는 암호화된 메시지를 이미 갖고 있습니다. 그래서 이 문자열을
다시 넘길 필요가 없습니다. 이제 docder로 다시 돌아와서, 우리는 0번째
문자로 시작해서 각각 10번째 문자만 저장하는 for문을 작성해야 합니다.
문자열을 확인해야 하니까 비밀 메시지의 길이만큼 for문이 반복되야
합니다. 우리가 읽을 문자열은 EncodedMessage 안에 있습니다. i를
1만큼 자동 증가를 하지 않고 10만큼 자동 증가하기로 하겠습니다. 그래야
10번째 문자를 읽어오기 때문입니다. 반복문 안으로 들어가서, 반복해야 할 부분은
i가 i번째 글자를 읽어오고 decodedMessage에 저장하는 것입니다.
그래서 decodedMessage는 decodedMessage + encodedMessage.substring(i, i+1)이
됩니다. 이렇게 해야 한 문자열 안의 한 글자만 가져올 수 있다는 것을 기억하세요.
실행해보니 비밀 메시지가 더 있습니다. 뭔지 궁금하시면
다른 인덱스로부터 시작을 해야 알 수 있을 것 같습니다.
하지만 지금은 잠시 오류에 대해서 설명해 보도록 하겠습니다.
이와 같이 여기에 <나 <=를 이렇게 작성했다면,
'문자열 범위 이탈'이라는 예외 처리가 뜰 겁니다.
너무 높은 인덱스를 enocdedMessage 안에서 가리키면, 문자열 범위 이탈
예외 처리가 일어나서 실행시간 오류가 됩니다. 실행시간 오류가 좋은 점은,
프로그램에 여러분에게 오류가 뭔지 알려주기 때문입니다.
아무것도 모른채 자신의 프로그램을 이상하게 바꾸는 것 보다 훨씬 더 좋은 것 같습니다.
하지만 이 문제를 enocdedMessage.length() -1을 넣으면서
해결을 할수도 있습니다. 실행은 잘 되지만, 제가 생각할 때는
깔끔해 보이지 않습니다. 문자열을 이용해서 반복할 때는, i를 길게 하고
length를 짧게 하는 것이 좋습니다.
Đầu tiên, hãy xem chúng ta sẽ sử dụng
decode method như thế nào. Nó sẽ
trả về một String với decoded message.
và nó không cần một arguments nào cả.
vậy, trong decoder tester, chúng ta muốn
in ra kêt qủa của decoder.decode();
decoder đã thực hiện mã hóa các chuỗi
trong messages. vậy chúng ta không
cần thông qua các chuỗi đó lần nữa.
bây giờ trở lại decoder. chúng ta cần
viết 1 vòng lặp for để đọc mỗi 10 kí tự,
bắt đầu với kí tự thứ 0. kể từ
chuỗi chúng ta sẽ đọc, chúng ta
muốn chạy đến khi chỉ số nhỏ hơn
độ dài của chuỗi.EncodedMessage là
chuỗi chúng ta đang đọc. và
thay vì mỗi lần tăng lên 1 tôi sẽ tăng i lên 10 mỗi lần
vì vậy chúng ta sẽ thấy mỗi 10 kí tự.
bên trong vòng lặp, phần mà tôi
muốn lặp lại là sẽ đọc i kí tự,
và sẽ thêm nó vào decoded message. vậy
decoded message sẽ cộng chính nó,
encodedMessage.substring từ i đến i+1
Nhớ rằng, đây là cách chúng ta nhận 1 kí tự
ra khỏi 1 chuỗi dài hơn. chúng ta hãy xem nếu
nó hoạt động. giống như có nhiều
messages bí mật ở đây. nếu bạn
tò mò những gì nó có, tôi đoán
bạn sẽ cố gắng bắt đầu ở
những chỉ số khác .hãy nói 1 chút về
những lỗi có thể bạn gặp phải
Nếu bạn đã viết <= ngay ở đây
bạn sẽ gặp phải 1 chuỗi ngoài giới hạn
ngoại lệ. khi bạn cố gắng
truy cập 1 chỉ số qúa cao trong
encodedMessage. 1 chuỗi chỉ số ngoài
giới hạn ngoại lệ là 1 runtime error.
runtime error cụ thể là tốt, bởi vì
nó dừng chương trình và nói cho bạn rằng
bạn đã cố truy cập gía trị không tồn tại
nó tốt hơn nhiều là âm thầm làm rối tung
kết qủa của chương trình
bạn có thể đúng, tuy nhiên, viết điều kiện
1 cách vụng về giống như
i<=encodedMessage.length()-1.
nó sẽ hoạt động, nhưng tôi không
nghĩ nó sẽ ko có lỗi. khi bạn lặp qua 1 chuỗi,
nó tốt nhất để chạy miễn là
i nhỏ hơn độ dài