2016-09-29 122 views
0

所以我很好奇我在这里失去了什么。我有一个学校的程序,部分程序要求我测量输入字符串的长度。我把它设置为“if String == 6”,你可以在我的代码中看到。我的教授宁愿将它存储在一个变量中,然后使用.length方法来测量它。他的确切说法如下:“要查看票号是否大于六个字符,则需要将其存储在一个变量中,然后在第19行中,可以使用ticket.length == 6进行检查。”创建一个变量来测量字符串的长度

我试着用他的方法,我把“ticket_number.length == 6”。但是会返回一个错误。林不知道为什么,是不是“ticket_number”需要测量的变量?还是我需要为票证长度创建另一个变量?我确信有一个简单的答案,我似乎无法找到它。预先感谢任何和所有帮助!

begin 
    print "Please enter your six-digit ticket number." 

    ticket_number=gets.chomp.to_i 

    ones_digit=ticket_number%10 

    truncated_number=ticket_number/10.floor 

    remainder=truncated_number%7 

    if String=6 and ones_digit==remainder and ticket_number>0 

    print "Your ticket number is valid." 

    else 
    print "Your ticket number is invalid." 
    end 
end while ticket_number>0 
+0

我认为它测量了字符串的长度?或者说,确保它是= 6 –

+0

当您从头开始输入输入时,您已经有了一个变量。 – BoeNoe

+1

你应该发布你如何运行这个程序的细节以及你给的是什么输入,并发布完整的确切的错误信息。即使它看起来像你是无稽之谈,它会给程序员更多的经验提供一个很好的暗示错误的提示。见[mcve]。 –

回答

3

有一对夫妇在这里的问题,但最大的一个是,转换成整数意味着你已经没收你的机会来测试对长度:

ticket_number = gets.chomp 

if (ticket_number.length != 6) 
    puts "Your ticket number must be six digits" 

    next 
end 

你可以在事后转换:

ticket_number = ticket_number.to_i 

然后做你的数学。

理想情况下,您可以将此函数包装在一个函数中,根据票证号码,将根据有效性返回truefalse。这将它从显示和循环逻辑中解耦,简化了事情。

+0

谢谢,我觉得这很简单。我对这一切都非常陌生,因为在不到三周的时间里就有新的了。 –

+0

新生没什么问题。对于刚刚学习的人来说,Ruby特别宽容,但不要忘记它不能做不理解其含义的事情。尽管起初错误可能会让人困惑,但他们很快就会发现一些模式,并且最常见的方法是丢失方法。检查与你交互的任何对象的'.class',然后通常可以查看该类的文档以获取有效方法的列表。例如:[Integer](https://ruby-doc.org/core-2.3.1/Integer.html)和[String](http://ruby-doc.org/core-2.3.1/String。 HTML)。 – tadman

相关问题