2016-05-26 9 views
1

私はRubyを自分で教えようとしています。私は解決しようとするいくつかのコードの問題を発見したが、私は立ち往生している。ここに私が持っているものと私が解決しようとしている問題があります。次のようにRubyループと配列

私のアルゴリズムである:

  • プロンプトユーザは1〜10(両端を含む)の間の数を入力します。
  • 適切な名前の変数にその番号を読み込みます。
  • 数値が適切な範囲にあることをテストします。
  • 条件ごとに範囲外の場合は、新しい番号を入力します。
  • ユーザが入力した数字を使用して、 個の要素数の配列を作成します。
  • 配列のサイズを に等しい数の反復で実行するループを作成します。
  • 毎回、文字列を入力するようユーザーに指示します。名前は (車の名前、そのようなもの)です。
  • アレイが入力されたら、アレイの内容を3行目の 行に表示します。

これはforループが必要で、forループ内に適切な場所に改行を挿入する決定を含める必要があります。また

  • ダッシュを持つ配列要素セパレート - しかし、行の最初の要素の前にダッシュ を入れていない、とラインの 最後の要素の後にダッシュを入れないでください。
  • Ruby関数を使用して配列をアルファベット順にソートし、 を再度表示します。
  • は再び出力の各行に三つの要素を入れてダッシュあなたが最初に表示努力で行った方法を置き、その内容3回目を表示し、配列

の順序を逆に

  • loop do 
        print "Enter an integer between 1 and 10: " 
        s = gets.chomp.to_i 
        if s >0 && s <= 10 
         break 
         else 
         puts "Interger entered is outside specified range." 
        end 
    end 
    array=[] 
    array.size 
    loop do 
        print "Enter name of a car model: " 
        car=gets.chomp 
        array<<car 
        for i in array 
         array.slice(1..9) {|car| 
         puts car.join(", ") 
         } 
        end 
    end 
    
  • +0

    ループ行う \t印刷 "1と10の間の整数を入力します:" \t S = gets.chomp.to_i \t S> 0 && S <= 10 \t \tブレーク \t他\t 場合\t \t puts "入力されたIntergerが指定範囲外です。" \tエンド エンド 配列は= [] array.size ループが \tプリントは "車モデルの名前を入力します。" ん \t車= gets.chomp \t配列<<車 \tを私のために、アレイ \tに\t array.slice(1..9){| car | \t \t \t \t} \tエンド\t エンド – Natela

    +2

    はFYI、誰がその多くのテキストを読みたいとは思いません( "")car.joinを置きます。 – theblindprophet

    +2

    発生している問題の説明を忘れています。 –

    答えて

    1

    解決策はありますか?

    loop do 
        print "Enter an integer between 1 and 10: " 
        s = gets.chomp.to_i 
    
        if (1..10).include?(s) 
        arr = [""] * s 
        i = 0 
        while i < arr.length 
         print "Enter name of a car model: " 
         car = gets.chomp 
         arr[i] = car 
         i += 1 
        end 
    
        puts arr.join(", ") 
        break 
        else 
        puts "Interger entered is outside specified range." 
        break 
        end 
    end 
    

    結果は:溶液以下

    [[email protected] ~/temp]$ ruby loop.rb 
    Enter an integer between 1 and 10: 2 
    Enter name of a car model: car_a 
    Enter name of a car model: car_b 
    car_a, car_b 
    

    UPDATE

    天然ソーティング

    loop do 
        print "Enter an integer between 1 and 10: " 
        s = gets.chomp.to_i 
    
        if (1..10).include?(s) 
        arr = [""] * s 
        i = 0 
        while i < arr.length 
         print "Enter name of a car model: " 
         car = gets.chomp 
         arr[i] = car 
         i += 1 
        end 
    
        puts arr.sort.each_slice(3){ |e| puts "#{e.join(", ")}\n"} 
        break 
        else 
        puts "Interger entered is outside specified range." 
        break 
        end 
    end 
    

    結果があると行あたり3つの要素によってアレイを印刷する:

    [[email protected] ~/temp]$ ruby loop.rb 
    Enter an integer between 1 and 10: 4 
    Enter name of a car model: z 
    Enter name of a car model: a 
    Enter name of a car model: x 
    Enter name of a car model: b 
    a, b, x 
    z 
    

    そして、逆ソート:

    loop do 
        print "Enter an integer between 1 and 10: " 
        s = gets.chomp.to_i 
    
        if (1..10).include?(s) 
        arr = [""] * s 
        i = 0 
        while i < arr.length 
         print "Enter name of a car model: " 
         car = gets.chomp 
         arr[i] = car 
         i += 1 
        end 
    
        puts arr.sort{ |x, y| y <=> x }.each_slice(3){ |e| puts "#{e.join(", ")}\n"} 
        break 
        else 
        puts "Interger entered is outside specified range." 
        break 
        end 
    end 
    

    結果は次のとおりです。

    [[email protected] ~/temp]$ ruby loop.rb 
    Enter an integer between 1 and 10: 4 
    Enter name of a car model: z 
    Enter name of a car model: a 
    Enter name of a car model: x 
    Enter name of a car model: b 
    z, x, b 
    a 
    
    +0

    これは近づいています。私は1行に3要素を出力する必要があります。私は7つの要素を持っている場合、最初の2行が3つの要素を持ち、3行目が1つの要素で3行に出力されます。 – Natela

    +0

    これを行うには、forループを使用するように指示します。私はコンマの代わりにダッシュを追加する方法を考え出しました。次にソートしてアルファベット順に出力し、その順番を逆にする必要があります。 – Natela

    +0

    @Natelaはあなたのために働くのですか? – retgoat

    1

    それは小さな断片にあなたのプログラムを分割する方が良いでしょう。また、必要のないループを使用しないでください。

    # Specify Exception class for your context 
    class ValidationException < RuntimeError 
    end 
    
    def number_of_cars_from_input 
        # Get user input 
        print 'Enter an integer between 1 and 10: ' 
        number = gets.chomp.to_i 
        # Validate input for your requirements 
        unless (1..10).cover?(number) 
        raise ValidationException, 'Interger entered is outside specified range.' 
        end 
        number 
    rescue ValidationException => err 
        # Print exception and retry current method 
        puts err 
        retry 
    end 
    
    # Get car name from user input 
    def car_from_input 
        print 'Enter name of a car model: ' 
        gets.chomp 
    end 
    
    # Create array with size equal to number from imput and fill it with cars 
    array_of_cars = Array.new(number_of_cars_from_input) { car_from_input } 
    # Separate cars in groups by 3 and join groups 
    puts array_of_cars.each_slice(3).map { |a| a.join(', ') }