2016-04-08 46 views
-2

Diğer dillerde gönderilen çözümler görmekteyim ama Ruby'yi bu yüzden burada istiyorum.Öğrenci İşaretleri Hash

Ruby kullanarak bir öğrenci notları sistemi oluşturmaya çalışıyorum, bu, öğrencinin adını ve o öğrencinin kullanıcı için iki notunu almalıdır.

student_marks = { 
     "Steve" => 45, 65, 
     "James" => 20, 75, 
     "Scott" => 30, 90 
    } 

Kodum girişimi aşağıdaki gibidir: Açıkçası bir problem olması

continue = "y" 

    student_grades = Hash.new 

    while continue == "y" 

    puts "Please enter student name" 
    name = gets.chomp 

    puts "Please enter the first grade for #{name}" 
    grade_one = gets.chomp.to_i 

    puts "Please enter the second grade for #{name}" 
    grade_two = gets.chomp.to_i 


     student_grades.each do |key, value| 
      student_grades[key] = name 
      student_grades[value] = grade_one 
      student_grades[value][1] = grade_two 

     end 

     puts "Do you want to continue? y or n" 
     continue = gets.chomp 

    end 


    puts student_grades 

Ben böyle bir şey görünümlü sona ereceğini yüzden denemek ve bir karma bu depolamak için karar mantığım her bir yinelemeyi kullanarak karmayı doldurmaya çalışırken, geri dönüşü devam ettiriyorum. Sanırım dizileri kullanabilirim ve karmaları onlardan alabilirim, fakat kullanıcı girdisinden yinelemeyi kullanarak hem anahtarları hem de değerleri karıştırmanın bir yolu var mı?

+0

Öncelikli olarak beklenen sonuç geçersizdir. – sawa

+0

Kodunuzda, "student_grades" ile boş bir karma olarak başlarsınız, ardından yineleyin, bunun için hiçbir şey yapmıyorsunuz demektir. – sawa

+0

Oops teşekkürler! Görünüşe bakılırsa mantığım karmaşıklar etrafında tamamen yanlış. – Sevenum

cevap

0

Ruby'de karmaların nasıl çalıştığını yanlış anlıyor gibisiniz. Biraz okuma önerebilirim.

Bu arada, şunu deneyin:

student_grades = Hash.new {|h,k| h[k] = [] } 

Artık bir öğrenci not almak her zaman, o öğrencinin karma anahtarı için dizi değeri içine itebilir. Örneğin

: ondan biraz bilgi ayıklamak gerekiyorsa

student_grades 
=> {} 

student_grades['Mark'] << 95 
student_grades['Mark'] << 86 

student_grades 
=> {'Mark' => [95, 86]} 

Eğer döngünün her vadede hiç karma üzerinde yineleme gerekmez, sadece bu yapıyor olmalı.

+0

Öneri için teşekkürler, cevabınız açıktır. Mantıklarımı mantıksız bir şekilde yanlış anladım, kitaplara geri döndüm. – Sevenum

+0

Bazı kişileri Ruby'de gezdiren kısım, yeni bir karma oluştururken, Ruby'nin her bir anahtar için bir başlangıç ​​değeri almasını istiyorsanız, bu değerle ilgili kesin olmanız gerekir. Örneğin bir notu ayarlamak istiyorsanız, 'notları' ['Mark'] = 95' gibi bu bir problem değildir, ancak eğer saymak istediğiniz gibi bir sayı yapmak istiyorsanız ['thing'] + = 1', Ruby Başlangıç ​​değerinin '0' olduğunu kabul etmeyin - bunun için hashınızı 'Hash.new (0)' olarak adlandırmanız gerekir, böylece Ruby ile başlamak istediğiniz şeyi bilirsiniz. Aynı şey burada doğrudur, Ruby'ye her yeni anahtarın yeni bir Array nesnesini değer olarak başlatması gerektiğini söyleriz. – Damon