0

私は現在、クラスの作成とそれらのクラスの操作に焦点を当てた、基本的な Ruby プログラミング プロジェクトに取り組んでいます。経験はほとんどありませんが、Ruby の一般的な考え方は理解しています。

私の仕事は Array2 クラスを作ることです。クラスから配列を作成し、配列に対して操作を実行します。私が試みたメソッドは、to-string メソッドと、2 つの配列パラメーターを持ち、最初の配列が 2 番目の配列の逆であるかどうかをテストする is-reverse メソッドです。

これが私の試みです。試してみましたが、配列をクラスに正しく渡すのに問題があります。また、私はいくつかの呼び出しの問題を抱えていると思います。

class Array2
def initialize (a)
    @array = Array.new(a)
end

def to_s
    return @array
end

def isreverse (array1,array2)
    reverasea = Array.new
    reverasea = array1.reverse
    if  (reversea = array2) then
        return "The First Array Is The Reverse Of The Second Array"
    else
        return "The First Array Is Not The Reverse Of The Second Array"
    end
end
end

array1 = ["4","5","6","7"]
array2 = ["7","6","5","3"]

a1 = Array2.new(array1)
a2 = Array2.new(array2)

puts a1.to_s
puts a2.to_s
puts a1.isreverse(array1, array2)
4

3 に答える 3

1

ここでは、既存のアプローチにいくつかの調整を加えます。オリジナルを変更したところにコメントを入れました::

class Array2
  def initialize (a)
    @array = Array.new(a)
  end

  def to_array   # to_s is a misnomer: it doesn't return a string
    return @array
  end

  def isreverse (a)
    #reverasea = Array.new  NOTE this is not needed; the following .reverse creates a new array for you
    reversea = a.to_array.reverse  # get the reverse of the array represented

    # NOTE = is assign, == is compare in this case
    # The following compares the reversed of the array `a` with the array value of this class, @array
    if  (reversea == @array) then
      return "The First Array Is The Reverse Of The Second Array"
    else
      return "The First Array Is Not The Reverse Of The Second Array"
    end
  end
end

array1 = ["4","5","6","7"]
array2 = ["7","6","5","3"]

a1 = Array2.new(array1)
a2 = Array2.new(array2)

puts a1.to_array  # (renamed)
puts a2.to_array  # (renamed)
#puts a1.isreverse(array1, array2)  NOTE you don't need to pass array1 into class a1 since it is already made from array1
puts a1.isreverse(a2)
于 2013-08-10T01:27:56.020 に答える
1

私は次のようなもっと単純なものを選びます:

Filename: reverser.rb

class Reverser
  def self.is_reverse_of(array1,array2)
    array1_reversed=array1.reverse
    is_or_isnt= (array1_reversed==array2)? 'Not ' : ''
    return "The First Array Is #{is_or_isnt}The Reverse Of The Second Array"
  end
end
puts Reverser.is_reverse_of(["4","5","6","7"], ["7","6","5","4"])
puts Reverser.is_reverse_of(["4","5","6","7"], ["7","6","5","3"])

ruby reverser.rb
The First Array Is Not The Reverse Of The Second Array
The First Array Is The Reverse Of The Second Array

クラスレベルのメソッドを使用し、インスタンス化をあまり行わず、コードを少なくするという考えです。

于 2013-08-10T01:29:02.410 に答える
1

おそらく等価テストを意味する割り当てがあります。

 if  (reversea = array2) then

reversea を完全に省略してテストするだけでもかまいません (これには で reverse メソッドが必要ですArray2) 。

if (array1.reverse == @array) then

私は個人的に isreverse をブール値にし、同じ配列を再度渡す必要をなくします:

def isreverse? (array1)
    return (@array.reverse == array1)
end

次に、次のように使用します

puts "The First Array Is#{a1.isreverse?(a2)?"":" Not"} The Reverse Of The Second Array"

すべてをまとめると、次のようになります。

class Array2
    def initialize (a)
        @array = Array.new(a)
    end

    def to_s
        return @array
    end

    def reverse
        @array.reverse
    end

    def isreverse? (array1)
        return (array1.reverse == @array)
    end
end

array1 = ["4","5","6","7"]
array2 = ["7","6","5","3"]

a1 = Array2.new(array1)
a2 = Array2.new(array2)

puts a1.to_s
puts a2.to_s
puts "The First Array Is#{a1.isreverse?(a2)?"":" Not"} The Reverse Of The Second Array"

フィドル

于 2013-08-10T01:17:14.493 に答える