-1

プログラムのメニューからオプション 1 を選択すると呼び出される次のコードがあります。

def self.addModuleToScheme
=begin
Create an empty hash for the schemes
=end
 schemes = Hash.new()
=begin
Allow user to enter scheme names into a set of variables, and use each scheme name as a hash/ array of modules.
Then allow the user to enter the the modules for each scheme into each of the hashes

Create specific hash elements by using the following line:
schemes = {:scheme1 => scheme1variable, :scheme2 => scheme2variable}
=end

 puts "What is the name of the scheme that you would like to add a module to? "
 schemeName = gets
=begin
Need to use an if statement here to check whether or not the scheme already exists, if it doesn't, create it, if it does,
tell the user that it does.
=end
 if schemes.has_key?(schemeName)
   puts "This scheme has already been added "
 else
   schemes[@noOfModulesInScheme] = schemeName
 end

 @noOfModulesInScheme + 1
# moduleName.moduleScheme = schemeName

# Print to check that scheme has been added to system:
 if schemes.has_key?(schemeName)
   puts "@schemeName has been added to the system "
 end

現在、コードを実行するとメニューが表示され、このコードが呼び出されるオプション 1 を選択します。次に、モジュールを追加したいスキームの名前を尋ねられます。それを入力すると、プログラムが終了します。

私がやりたいことは、入力したばかりのスキームがシステムに追加されたことを示す印刷物を作成し、プログラムが続行して、スキームに追加するモジュールを尋ねることです。

しかし、文内のハッシュ要素の内容を出力する方法がわかりません。誰かが私を正しい方向に向けることができますか?

編集

それが助けになる場合、これは私のプログラムの他のクラスです(メニューが印刷される場所)

class Application
# To change this template use File | Settings | File Templates.
require './courseModules.rb'
def initialize
  mainMenu
end

=begin
  def navigateTo(what)
  what.new(v).display
  mainMenu
  end
=end

def mainMenu
  puts "What would you like to do?
      1: Add module to a scheme
      2: Remove module from a scheme
      3: Query modules
      4: Modify module
      5: Register a student on a scheme
      6: Remove a student from a scheme
      7: Register a student on a module
      8: Remove a student from a module"
  case gets.strip
    when "1"
      CourseModules.addModuleToScheme
    when "2"
      CourseModules.removeModuleFromScheme
    when "3"
      navigateTo CourseModules
    when "4"
      navigateTo CourseModules
    when "5"
      navigateTo Student
    when "6"
      navigateTo Student
    when "7"
      navigateTo Student
  end
end
Application.new
end

編集

OK、提案された変更を行いましたが、プログラムを実行すると、「CourseModules: Class (NoMethodError) の未定義メソッド 'add_module'」というエラーが表示されます。

これは、私が持っていた古いメソッド (addModuleToScheme と呼ばれる) をクラスから削除してから、新しいメソッドを作成し、メニューでメソッド呼び出しを更新し、両方のクラスを保存したにもかかわらずです。古いメソッドがなくなったにもかかわらず、私のメニューはまだ古いメソッドを呼び出そうとしているようです... 何かアイデアはありますか?

4

1 に答える 1

0

あなたのコードにはかなりの問題があります -

  1. メソッド名と変数名での Un-Ruby スタイルの構文の使用。
  2. =begin; comment; =end1 行のコメントであっても を使用するのは良くありません。個人的には、複数行のコメントでも # スタイルを使用することを好みます。
  3. ローカル変数とインスタンス変数の交換可能な使用。たとえば、最後の行でローカル変数のハッシュキーを検索schemeNameし、その後putsでインスタンス変数を使用しますが、代わりに@schemeName使用する必要がある補間効果を達成しようとしている可能性があると思われます"#{schemeName}""@schemeName"

ただし、達成したいことを正しく理解していれば(つまり、スキームをキーとして、モジュールを値としてスキームのハッシュを作成する)、次のコードを試してください。この例では、スキームとモジュールの間に 1:1 の関係を持たせたいと想定していますが、スキームごとに複数のモジュールを定義したい場合は、別のループを追加してスキームの文字列値を配列に置き換えることで簡単に実現できます。以下のコードで。

def add_module
    schemes = {}
    scheme_exists = false
    add_another_scheme = true
    while add_another_scheme
            print "Enter Scheme Name: "
            scheme_name = gets
            schemes.has_key?(scheme_name.chop) ? scheme_exists = true : scheme_exists = false

            if !scheme_exists
                    print "Enter Module Name: "
                    module_name = gets
                    schemes[scheme_name.chop] = module_name.chop
                    puts "Scheme #{scheme_name.chop} has been added to the system"
            else
                    scheme_exists = false
                    puts "This scheme has already been added"
            end

            print "Enter another scheme? "
            ask_user_if_would_like_to_add_another_scheme = gets
            if !(ask_user_if_would_like_to_add_another_scheme.chop == "Y" or ask_user_if_would_like_to_add_another_scheme.chop == "Yes")
                    add_another_scheme = false
            end
    end
    puts schemes
end
于 2012-08-21T10:50:25.547 に答える