2015-01-19 2 views
0

Я должен создать программу формы и консольную программу для определения простых чисел. Я закончил программу формы, но у меня проблемы с программой консоли.Простое приложение для консольного приложения

Я чувствую, что я почти получил его работу, единственное, что иногда бывает, работает только каждый второй вход, а иногда ошибки все равно вызывают ошибку, даже если у меня есть оператор On Error.

Если кто-нибудь может объяснить мне, почему это происходит, я был бы благодарен. Я хочу понять, почему он делает то, что делает. Должен ли я, возможно, использовать Case Case, а не Do Loop?

Текущий код:

Module Module1 

    Sub Main() 

     System.Console.WriteLine("Enter a number from 1 to 10000 to find out if it's prime, Type END to exit") 
ExitHere: 
     Do 
      On Error GoTo ErrorHandler 
      Dim UserInput As Integer = Integer.Parse(Console.ReadLine()) 
      Dim IsItPrime As Boolean = False 
      Dim i As Integer 


      For i = 2 To (UserInput - 1) 
       If UserInput Mod i = 0 Then 
        IsItPrime = False 
        Exit For 
       End If 
      Next i 
      If i = UserInput Then 
       System.Console.WriteLine(UserInput & " is a Prime Number.") 
      Else 
       System.Console.WriteLine(UserInput & " is not a prime number.") 
      End If 


     Loop Until Console.ReadLine = "End" 
     Exit Sub 
ErrorHandler: 
     Console.WriteLine("There seems to have been an error.") 
     GoTo ExitHere 


    End Sub 

End Module 
+0

Посмотрите здесь: HTTP: //www.freevbcode.com/ShowCode.asp ID = 1059 –

+0

Вам нужно только проверить/2, то все нечетные числа до SQRT (Входа #) –

+0

также .. вам нужно проверить для себя ОДНОГО. Один не является простым числом. Тем не менее, ДВА, по-видимому, ... –

ответ

0

Я бы написать ему что-то подобное:

Sub Main() 
    Dim response As String 
    Do 
     Console.Write("Enter an integer from 1 to 10000, or `END` to exit: ") 
     response = Console.ReadLine().ToUpper 
     If response <> "END" Then 
      Dim UserInput As Integer 
      If Integer.TryParse(response, UserInput) Then 
       If UserInput >= 1 AndAlso UserInput <= 10000 Then 
        Dim IsItPrime As Boolean = True ' assume it's prime until proven otherwise 
        If UserInput > 3 Then 
         For i As Integer = 2 To (UserInput - 1) 
          If UserInput Mod i = 0 Then 
           IsItPrime = False 
           Exit For 
          End If 
         Next i 

        End If 
        If IsItPrime Then 
         System.Console.WriteLine(UserInput & " is a Prime Number.") 
        Else 
         System.Console.WriteLine(UserInput & " is NOT a prime number.") 
        End If 
       Else 
        Console.WriteLine("Out of Valid Range") 
       End If 
      Else 
       Console.WriteLine("Invalid Integer.") 
      End If 
     End If 
    Loop While response <> "END" 
End Sub 
0

У вас есть два ReadLine, вы должны иметь только один. Удалите ReadLine внутри Loop Until. Сохраните значение первой ReadLine и определите, является ли это числом или Конец.

Dim input As String = Console.ReadLine() 
Dim inputNumber As Integer 

If input = "End" Then 
    Exit Do 
Else If Integer.TryParse(input, inputNumber) Then 
    ' It's a number 
Else 
    ' Invalid input 
End If 
0
Sub Main() 

    Dim n As Integer = 1 

    Dim counter As Integer 

    Dim x As Integer 

    Console.Write("Enter A Number : ") 

    x = Console.ReadLine 

    While n <= x 

     If x Mod n = 0 Then 
      counter = counter + 1 

     End If 
     n = n + 1 
    End While 
    If counter <= 2 Then 
     Console.WriteLine("This Number is a Prime") 
    Else 
     Console.WriteLine("This Number is a Composite") 
    End If 

    Console.ReadLine() 

End Sub 
Смежные вопросы