Ruby程序数组问题

时间:2016-08-09 03:34:59

标签: arrays ruby

我正在尝试在ruby中创建一个程序,用户可以在其中不断添加项目,并且在提交单词“EXIT”之前它将不断显示数组的内容。

我还想弄明白如何添加一个程序,我可以在列表中使用array.pop []删除特定的项目名称,但程序仍然有效。

这是我到目前为止所得到的:

array = []
puts "WELCOME TO THIS PROGRAM"
puts "You can add any item as much as you want. Type EXIT if you want to STOP!"
print "Add a new item: "
user_input = gets.chomp
array.push user_input
    puts "HERE ARE THE CONTENT OF THE ARRAY "
    p(array)

while user_input != "EXIT"
    puts "Add a new item: "
    user_input = gets.chomp
    array.push user_input
    puts "HERE ARE THE CONTENT OF THE ARRAY "
    p(array)
end

知道我的节目缺少什么吗?

2 个答案:

答案 0 :(得分:3)

此代码最简单的工作版本涉及对其进行重组。使用case非常适合突破特殊行为,就像你在这里使用" EXIT"触发:

array = []

puts "WELCOME TO THIS PROGRAM"
puts "You can add any item as much as you want. Type EXIT if you want to STOP!"

loop do
  print "Add a new item: "

  case (input = gets.chomp)
  when 'EXIT'
    break
  else
    array << input
  end
end

puts "HERE ARE THE CONTENT OF THE ARRAY "
p(array)

值得注意的是,在大多数Ruby程序中,这种打印和纠缠输入的想法确实是不规则的,这是非常有限的。 $stdin文件句柄最适合用于此,并且不需要明确的&#34; EXIT&#34;调用,文件句柄将在没有更多数据时返回EOF。您可以在大多数系统上使用CTRL + D手动触发这些。

这使程序变得更小:

# Pull in all lines from $stdin and run chomp on each.
array = $stdin.readlines.map(&:chomp)

puts "HERE ARE THE CONTENT OF THE ARRAY "
p(array)

这也意味着你可以这样做:

ruby my_program.rb < inputfile.txt

根据您的语法,您必须手动添加&#34; EXIT&#34;到你想要处理的任何文件的末尾。这是非常反UNIX的,它喜欢简单易读和写入,这样你就可以将它们链接在一起。

如果要从列表中删除项目,可以使用Array#delete执行此操作。学习Ruby时,请确保为您正在使用的任何课程打开文档。通常有一个工具可以完成你想要的工作,或者两个工具可以结合使用。

答案 1 :(得分:1)

最好将您的逻辑捆绑到方法中,并选择与该方法旨在“不言自明”相关的命名约定。您的代码似乎工作正常,除了您需要将其捆绑到方法中并创建另一种方法来从数组中删除元素“删除元素”。

我快速绘制了一些内容并且工作正常,但是(当然)你仍然需要调整它并添加剩余的逻辑来整体控制你的程序/ app / ruby​​类等。:

   #!/usr/bin/env ruby

def run_me 

    puts "WELCOME TO THIS PROGRAM"

    # add items to an array.  
    add_to_ary 

    # test data for removing items from an array . 
    ary_of_items = ["item1", "item2", "item3", "item4", "item5"]
    remove_from_ary(ary_of_items)

end 


def add_to_ary 

    ary = []   
    puts "You can add any item as much as you want. Type EXIT if you want to STOP!"
    print "Add a new item: "
    user_input = gets.chomp
    ary.push user_input
    puts "HERE ARE THE CONTENT OF THE ARRAY "
    p(ary)

  while user_input != "EXIT"
    puts "Add a new item: "
    user_input = gets.chomp
    ary.push user_input
    puts "HERE ARE THE CONTENT OF THE ARRAY "
    p(ary)
  end

# return the array so that we can pass as an argument when deleting
  return ary   
end


def remove_from_ary(ary)

    puts "eneter the position of the element that you want to delete:"
    pos  = gets.chomp
    p ary.delete_at(pos.to_i)
    puts "deleted and element..."
    p(ary)

  while pos != "EXIT"
    puts "delete another element: "
    pos  = gets.chomp
    ary.delete_at(pos.to_i)
    puts "deleted another element... "
    p(ary)

  end

end


#run main here..
run_me

最后,不要将变量/数组/哈希命名为“array”,“hash”,“system”,“myvariabl”等。其中一些是保留的,会导致问题,而且令人困惑。