Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby到_的二进制参数转换错误_Ruby - Fatal编程技术网

Ruby到_的二进制参数转换错误

Ruby到_的二进制参数转换错误,ruby,Ruby,我试图解决一个需要二进制操作的黑客问题。测试用例是非常庞大的数字,所以我认为最好将它们作为字符串处理 t=gets def winner(pturn) if a%2==0 puts "Richard\n" else puts "Louise\n" end end while t != 0 turn=1 n=gets (n2=n).to_s(2) while n!=1 one="1"

我试图解决一个需要二进制操作的黑客问题。测试用例是非常庞大的数字,所以我认为最好将它们作为字符串处理

t=gets
def winner(pturn)
  if a%2==0 
    puts "Richard\n"
  else 
    puts "Louise\n"
  end
end            

while t != 0
    turn=1
    n=gets
    (n2=n).to_s(2)
    while n!=1
        one="1"
        zero="0"
        if n2.count(1)>1
            zero*=(n2.length - 2)
            one.concat(zero)
            n-=one.to_i(base=2)
        else
            n/=2
        end
     turn+=1
     end 
winner(turn)
t-=1
end
它导致了一个参数错误(参数数量错误),如下所示

(n2=n).to_s(2)

我想我用
来表示
是错误的。我看不出错误,需要有人指出。

参数错误来了,因为您试图将参数传递给to\s方法,因为to\s方法从不接受任何参数

所以你应该把(n2=n)改为(2)改为


我认为您正在尝试将Ruby中的数字转换为二进制表示的字符串。这在以下情况下是可能的(如果数字实际上是Ruby中的数字,例如Fixnum):

但是在您的例子中,调用
get
后得到的是一个字符串,string类的
to_s
方法只返回它自己,不接受任何参数,因此出现了错误

您可以通过调用
gets.to_i
而不仅仅是
gets
来修复它,因此读取的内容字符串将在Ruby中转换为整数(您应该确保在那里只读取数字)

我相信您正在尝试将
n
的二进制表示(作为字符串)赋给变量
n2
,因为您应该这样做

n2 = n.to_s(2)
如果你只是这样做:

(n2=n).to_s
由于有括号,首先将
n2
赋值为
n
,然后在
n2
上调用
to_s
,将返回
n2
的字符串版本,并且不会发生任何其他情况。你应该做的第一件事是转换,然后是作业


调用string#count时还应该传入一个字符串,也就是说,你应该调用
n2.count('2')
,而不是
n2.count(2)

我认为我们不接受任何参数。这个代码应该做什么?@MuhammadYawarAli:
整数#到
(或者更准确地说,和的对)接受可选的
base
参数,该参数告诉它要在哪个库中打印数字。默认值为
10
。感谢所有试图帮助我的人。我不明白的是,我得到的输入n是一个数字,n2基本上是n。那么类型应该是fixnum no?如果它是一个fixnum,为什么to.s在5.to_s(2)这样的情况下不工作?@sawa刚才不在,但我已经编辑了一点这个问题。。。该程序应该计算谁是最终的赢家。它从一个数字开始(非常大),如果这个数字不是2的幂,则减去下一个最大的2的幂。否则,将其减半。
Integer#to_s
(或者更准确地说,and对)接受一个可选的
base
参数,告诉它要在哪个基数中打印数字。默认值是
10
。但是如果我将其更改为(n2=n)。要知道程序如何知道我要将其更改为基数2?@idkwhatamidoing:
get
是“get string”的缩写。你认为它会返回什么?:)所以
get
实际上将输入作为字符串?谢谢,这真的很有帮助!另外,
count()
不是预定义的方法吗?我得到了一个
未定义的方法
错误,原因是
count()
@SergioTulentsev哇哦,是的,我没想到。是否无法直接将输入作为整数获取?抱歉,我太习惯使用强类型的语言了。@IDKwatamioung:任何具有强类型的语言都不会“直接”得到整数。控制台输入本质上是文本。您所能做的就是在得到字符串时解释它(解析为整数或其他形式)
n2 = n.to_s(2)
(n2=n).to_s