在我的编程课程中,我必须创建一个程序,允许用户输入一个句子,使用按钮" Encode"和#34;解码"作为选择。因此,对于" Encode",你必须将句子翻译成Asc数字(已经这样做了)。但是,我目前仍然坚持使用解码器#34;部分,因为您必须使用For循环和数组来按空格分隔Asc数字,然后逐个将它们转换为字符。这就是我到目前为止所拥有的:
Public Class Form1
Dim Message As String
Dim NewMessage As String
Dim Part As String
Dim Part2 As Integer
Dim Letter As String
Dim Length As String
Dim ints() As Integer
Dim intlength As Integer
Private Sub btn_Enter_Click(sender As Object, e As EventArgs) Handles btn_Enter.Click
Message = txt_Message.Text
Length = Message.Length() - 1
If rbn_Encode.Checked = True Then
For Num As Integer = 0 To Length
Letter = Message(Num)
Me.lbl_Code.Text = lbl_Code.Text & Asc(Letter) & " "
Next
End If
If rbn_Decode.Checked = True Then
For Num As Integer = 0 To intlength Step 1
If Message(Num) <> " " Then
Part = Part & Message(Num)
Else
NewMessage = NewMessage & ChrW(Part) & " "
End If
Next
Me.lbl_Code.Text = NewMessage
End If
End Sub
Private Sub ExitToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExitToolStripMenuItem.Click
Application.Exit()
End Sub
End Class
我已经坚持了大约两个星期,我仍然无能为力。感谢您的帮助,祝您度过愉快的一天。
答案 0 :(得分:0)
这可能似乎转移了问题的主题,但这一切都意味着更好的答案。
好的,您的代码存在一些问题。首先,确保&#34; Option Strict&#34;正在看 - 看看here。这将迫使您正确转换类型并减少出现问题的可能性。考虑到上述情况,
export const maxLenght = max => value => {
let v;
let result = value.length > max;
if(result === false) {
v = value;
}
return v;
};
<Field
name="name"
type="text"
component={renderField}
label="Nome Completo *"
placeholder="Nome Completo"
normalize={maxLenght(10)}
/>
应该是
Dim Length As String
到下一位
每个程序都应该承担一项责任。您的Dim Length As Integer
事件处理程序包含用于编码文本和解码数字的代码。这些应该分成他们自己的程序。在像你这样的相对较短的代码中,它并不是一个问题,但即使在这里,它也会让事情变得更加模糊。看看下面的代码。还有更多问题,但我们马上就会看一下。下面的代码更清晰,更易于维护。
btn_Enter.Click
下一步。
在将字符串编码为ASCII的代码中,您将结果数据直接存储在标签Private Sub btn_Enter_Click(sender As Object, e As EventArgs) Handles btn_Enter.Click
Message = txt_Message.Text
Length = Message.Length() - 1
If rbn_Encode.Checked = True Then
EncodeTextToAscii()
End If
If rbn_Decode.Checked = True Then
DecodeToText()
End If
End Sub
Private Sub DecodeToText()
For Num As Integer = 0 To intlength Step 1
If Message(Num) <> " " Then
Part = Part & Message(Num)
Else
NewMessage = NewMessage & ChrW(Part) & " "
End If
Next
Me.lbl_Code.Text = NewMessage
End Sub
Private Sub EncodeTextToAscii()
For Num As Integer = 0 To Length
Letter = Message(Num)
Me.lbl_Code.Text = lbl_Code.Text & Asc(Letter) & " "
Next
End Sub
的文本属性中。永远不应将用户界面用作数据的主存储。这是不好的做法,并且可能允许用户意外地更改数据 - 例如在文本框中。对于标签而言,它并不重要,但要养成良好的习惯要好得多。
要存储编码的ASCII数字,您可以使用数组lbl_Code
,但正如您的代码所代表的那样,ints
的声明就是这样。阵列中没有空间来存储数据。因此,在ints
过程中,您需要将Encode
的大小调整为与字符串中的字符数相同。
所以现在我们有..
ints
最后谈到你的问题。 Private Sub EncodeTextToAscii()
ReDim ints(Length)
For Num As Integer = 0 To Length
Letter = Message(Num)
ints(Num) = Asc(Letter)
Next
End Sub
过程现在可以写成这个..
Decode
您可以使用Private Sub DecodeToText()
NewMessage = ""
For Each asciiNumber As Integer In ints
NewMessage = NewMessage & ChrW(asciiNumber) & " "
Next
Me.lbl_Code.Text = NewMessage
End Sub
语句简单地获取循环的长度并获取数组的每个元素中的ascii数字。你不需要知道数组的长度。它只是在整个长度上循环。更容易。
作为练习,请尝试将For Each
想法应用于For Each
程序。 : - )