视觉基本<>问题

时间:2018-09-24 16:26:47

标签: arrays vb.net

我正在使用输入框在数组中找到一个元素。这是我目前拥有的:

arrayNumber = InputBox("Please enter your desired number.")
For i = 0 To 9
    If arrayNumber = data(i) Then
        outputMessage1 = ("Your number is found in the first array. " & i & " is the index of the desired number.") 
    Else
    End If
Next

For i = 0 To 9
    If arrayNumber = data2(i) Then
        outputMessage2 = ("Your number is found in the second array. " & i & " is the index of the desired number.")
    Else
    End If
Next

For i = 0 To 9
    If arrayNumber = data3(i) Then
        outputMessage3 = ("Your number is found in the third array. " & i & " is the index of the desired number.")
    Else
    End If
Next

Selection.TypeText (outputMessage1 & " " & outputMessage2 & " " & outputMessage3)

For i = 0 To 9
    If arrayNumber <> i Then
        notFound = ("Sorry the element is not found.")
    Else
    End If
Next

Selection.TypeText (notFound)

...

我当前遇到两个问题:即使arrayNumber等于i,也会弹出notFound消息。我该如何解决?

另外,我知道我目前在每个数组中都有该元素的索引。有没有一种方法可以找到结合所有三个数组的元素的最早出现(即,如果4是第一个数组中的第三个索引,而第二个数组中的第二个索引,我想说最早出现在第二个数组)。

2 个答案:

答案 0 :(得分:0)

这可能会帮助您,或者至少给您一个想法

$docker logs 34045723709f3553533a1c823800697e55d43a7e676499310751f7116d3a1068
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Access to docker on host failed!!`

$ps -aux | grep dockerd
root     21836  0.4  0.2 436168 42920 ?        Ssl  10:39   0:00 /usr/bin/dockerd -H fd://

如果arrayNumber = InputBox("Please enter your desired number.") For i = 0 To 9 If arrayNumber = data(i) Then outputMessage1 = ("Your number is found in the first array. " & i & " is the index of the desired number.") ElseIf arrayNumber = data2(i) Then outputMessage2 = ("Your number is found in the second array. " & i & " is the index of the desired number.") ElseIf arrayNumber = data3(i) Then outputMessage3 = ("Your number is found in the third array. " & i & " is the index of the desired number.") Else notFound = ("Sorry the element is not found.") End If Next Selection.TypeText (outputMessage1 & " " & outputMessage2 & " " & outputMessage3) if statement中的一个被触发,它将跳过另一个elseifif

答案 1 :(得分:0)

明确解决出现“未找到”的问题,即使应用了有效的数字也是如此。

这是我要用作初级开发人员的培训元素的类型。主要是因为在我看来,您有一些要求,您要么不了解,要么对他们的需求不明确。

您已声明即使所提供的数字为0到9之间的值,您的代码也会显示未找到的消息,而您的代码如下所示:

For i = 0 To 9
    If arrayNumber <> i Then
        notFound = ("Sorry the element is not found.")
    Else
    End If
Next

之所以这样做是因为您要告诉它。只要arrayNumber不等于i,就可以设置NotFound,但是当arrayNumber不等于i时,则不执行任何操作。

无论如何,您都有一个要求和一个提议的逻辑解决方案,但它们的表现并不符合您的预期。我发现,采取行为不如预期的逻辑并将其转换为“真实的”字眼有助于澄清我在做什么。我会将这段代码翻译成以下语句:

  

对于我范围内的每个数字,如果提供的数字(ArrayNumber)为   不等于我的增量器(i),然后将NotFound设置为“ Sorry the   找不到元素。”

和往常一样,代码会执行我们告诉的内容,并且此代码的​​行为与编写的相同。问题是您实际要执行的操作是确定某个值是否包含在范围内,而您执行的唯一检查就是该值不包含在范围内。考虑以下语句:

  

在以下情况下,将NotFound设置为“对不起,找不到元素”:   提供的数字(ArrayNumber)不等于找到的任何值   在我的范围内

该语句可以更准确地确定您要在代码中执行的操作。尽管它们是相似的陈述,但焦点已转移。本质上,要求是“当Y为True时执行X”。但是,另一种看待这种逻辑的方式是“ X,直到Y为False”。我经常发现,数据检查的需求通常写为“当Y为True时执行X”,但是我们通常可以将这些需求编码为“ X,直到Y为False”(至少在我看来)。

这给了我们以下声明:

  

NotFound设置为“对不起,找不到元素”,直到提供   数字(arrayNumber)等于范围内的任何值

对我来说,这种风格逻辑可以构成良好的防御性编程。它为您提供了处理数据的初步立场。这意味着您可以按照预期执行,也可以处理未达到预期的数据。

现在,由于我们有了重新定义的意图声明,因此我们可以以不同的方式处理代码。

notFound = ("Sorry the element is not found.")
For i = 0 To 9
    If arrayNumber = i Then 
        notFound = "" 
        Exit For
    End If
Next 

这段代码意味着我们从数据已经“失败”范围检查中包括的立场开始,并且我们正在验证数据以证明立场是错误的。