2017-04-01 2 views
1

J'essaie de transmettre un tableau de nombres à une instruction case. Par exemple: Je demande à l'utilisateur d'entrer une valeur, par exemple 12. Ensuite, je le divise en un tableau [1,2]. Je passe ensuite à ma déclaration de cas de méthode. Ma déclaration de cas est de sortir le format numérique de 1 et 2.Transmettre des éléments individuels d'un tableau à une instruction case dans Ruby - Numéros d'affichage LCD

Mon numéro: Je n'arrive pas à imprimer plus d'une entrée de 1 élément. Comment puis-je transmettre les numéros 1 et 2 en tant que nombre numérique avec 1 matrice? Ou avec une entrée des utilisateurs? Est-ce que mon code est loin?

Mon code:

puts "Enter numbers between 0-9 up to 2 digits: " 

x = gets.chomp 
x = x.split('') 

def digital_number(n) 

digits = n 

#Start case for digit input 
    case digits 
    when ["1"] 
    puts " | " 
    puts " " 
    puts " | " 
    puts " " 
    puts n 

    when ["2"] 
    puts " - " 
    puts " |" 
    puts " - " 
    puts "| " 
    puts " - " 

    else 
    puts "That is not an available number." 

    end 
end 

digital_number(x) 

Répondre

0

x est votre tableau de chiffres. Vous devez passer chaque chiffre à case successivement:

number = gets.chomp 
digits = number.split('') 

digits.each { |digit| digital_number(digit) } 

Et cas, les chiffres:

case digit 
when '1' 
    # ... 
when '2' 
    # ... 
end 
+0

Merci! était confus pendant une seconde parce que je mettais la fonction .each au-dessus de mon cas. Dans mon cerveau, j'ai pensé à ce que vous aviez mis ... mais je ne pense pas avoir été capable de l'écrire correctement avant. – balee1991

+0

Savez-vous comment je peux sortir les numéros numériques côte à côte maintenant? Comme il passe par chaque numéro et le sort sur une nouvelle ligne. Y a-t-il un moyen de les espacer horizontalement? donc son impression horizontale 1 2 au lieu de verticalement 1, 2? – balee1991

+0

Ce n'est pas possible si vous imprimez les chiffres un par un. Vous pouvez sauvegarder chaque ligne dans une variable, c'est-à-dire, quand '1' lignes [0] << '| 'lines [1] <<' ''et ainsi de suite (' lines' est un tableau de chaînes ici), puis l'imprime ligne par ligne, c'est-à-dire 'lines.each {| line | met la ligne} '. –

0

Ceci est très similaire à la réponse de Vasily Yudin juste avec analyse et le même que ce qu'il avait dit aussi dans son commentaire.

puts "Enter numbers between 0-9 up to 2 digits: " 

x = gets.chomp 
@arr = [] 

def digital_number(n) 

    #Start case for digit input 
    case n 
    when "1" 
    @arr << " | " 
    @arr << " | " 
    puts n 

    when "2" 
    @arr << "-" 
    @arr << " |" 
    @arr << "-" 
    @arr << "| " 
    @arr << "-" 
    else 
    puts "That is not an available number." 
    end 
end 

x.scan(/\w/).each{|d| digital_number(d)} 
puts @arr.join(' ') 
+0

Je pense avoir une idée pour manipuler ce que tu m'as donné. Je vais l'essayer et je le republierai mal si je comprends bien ... – balee1991

+0

Si cela fonctionnait, vous devriez choisir ma réponse, à votre santé. – Jake

+0

J'ai mis à jour les gens qui ont aidé. Mais il dit qu'il ne peut pas être montré publiquement pour moins de 15 réputations. – balee1991

0

Le code ci-dessous résout mon problème. Peut supprimer '#' pour ARGV si vous voulez mettre un argument au code. Mais juste pour l'utilisation terminale, nous avons gets.chomp. Merci de votre aide. Cela résout mon problème, même si ce n'est peut-être pas le plus efficace.

# Add an argument in the terminal and 
# .to_s converts the argument into a string 
# so that ".scan" can take a string argument 

#x = ARGV.to_s 

x = gets.chomp 
puts "Arguments entered is between 0-9: #{x}" 

#These are empty arrays that get added in the cases 
@arr1 = [] 
@arr2 = [] 
@arr3 = [] 
@arr4 = [] 
@arr5 = [] 

def digital_number(n) 

#Start case for digit input 
case n 

when "0" 
@arr1 << " - " 
@arr2 << "| |" 
@arr3 << " " 
@arr4 << "| |" 
@arr5 << " - " 

when "1" 
@arr1 << " " 
@arr2 << " | " 
@arr3 << " " 
@arr4 << " | " 
@arr5 << " " 

when "2" 
@arr1 << " - " 
@arr2 << " |" 
@arr3 << " - " 
@arr4 << "| " 
@arr5 << " - " 

when '3' 
@arr1 << " - " 
@arr2 << " |" 
@arr3 << " - " 
@arr4 << " |" 
@arr5 << " - " 

when '4' 
@arr1 << " " 
@arr2 << "| |" 
@arr3 << " - " 
@arr4 << " |" 
@arr5 << " " 

when '5' 
@arr1 << " - " 
@arr2 << "| " 
@arr3 << " - " 
@arr4 << " |" 
@arr5 << " - " 

when '6' 
@arr1 << " - " 
@arr2 << "| " 
@arr3 << " - " 
@arr4 << "| |" 
@arr5 << " - " 

when '7' 
@arr1 << "-- " 
@arr2 << " |" 
@arr3 << " " 
@arr4 << " |" 
@arr5 << " " 

when '8' 
@arr1 << " - " 
@arr2 << "| |" 
@arr3 << " - " 
@arr4 << "| |" 
@arr5 << " - " 

when '9' 
@arr1 << " - " 
@arr2 << "| |" 
@arr3 << " - " 
@arr4 << " |" 
@arr5 << " - " 

else 
    puts "That is not an available number." 
end 
end 
# This part iterates the method for each numbers inputted 
x.scan(/\w/).each{|d| digital_number(d)} 

# Output # 
puts " " 
puts @arr1.join(' ') 
puts @arr2.join(' ') 
puts @arr3.join(' ') 
puts @arr4.join(' ') 
puts @arr5.join(' ')