/ / Jak umieścić dane wejściowe „pobiera” w tablicy? - rubin, tablice

Jak wkładasz „dostaje” wkład w macierz? - ruby, tablice

Ruby noob tutaj uczy się lin. Obecnie przechodzę w tym samouczku i pracuję nad tym ćwiczeniem:

Napiszmy program, który nas o to poprosi wpisz jakowiele słów, ile chcemy (jeden słowo w wierszu, kontynuowane aż do nas wystarczy nacisnąć Enter w pustym wierszu), a następnie powtarza te słowa do nas w kolejności alfabetycznej.

Na razie ignoruję część alfabetyczną.

Oto mój kod:

puts "Hi, do you need something sorted?"
yn = gets.chomp
while yn != "no"
puts "What else?"
array = [gets]
yn = gets.chomp
end
puts "Here"s what you told me: " +array.to_s

Poprawiałem to przez kilka godzin.Robię sobie przerwę, żeby mój laptop nie zepsuł się z powodu aktu frustracji. Czy ktoś z większym doświadczeniem i być może cierpliwym może wskazać moje błędy?

Odpowiedzi:

6 dla odpowiedzi № 1

Pamiętaj, że za każdym razem gets to metoda, która prosi użytkownika o wprowadzenie danych. Na twoich liniach:

array = [gets]
yn = gets.chomp

W rzeczywistości dwukrotnie prosisz o wprowadzenie danych. Zamiast tego przechowuj gdzieś dane wejściowe użytkownika (na przykład tablicę, patrz poniżej) i pobierz przechowywaną wartość, zamiast dwukrotnie pytać użytkownika.

Dalej, array = [gets] zastępuje istniejącą tablicę tablicą zawierającą jeden element (dane wejściowe użytkownika). Nigdy nie gromadzisz danych wejściowych użytkownika w tablicy. Zamiast tego zainicjuj tablicę przed pętlą while i użyj << w pętli:

array = Array.new
...
while yn != "no"
...
array << gets.chomp
yn = array.last
...
end

2 dla odpowiedzi nr 2

Jeśli masz z czymś trudności, pierwszą rzeczą, którą powinieneś zrobić, jest wypróbowanie czegoś prostszego.

Zamiast robić gets i zapętlanie, po prostu spróbuj wykonać prostą operację gets.

puts "Hi, do you need something sorted?"
yn = gets.chomp

Wtedy zobaczę, czy yn było tym, czego się spodziewałem.

Następną rzeczą, którą bym zrobił, to zamiast robić pętlę wiele razy, po prostu spróbuj raz

puts "Hi, do you need something sorted?"
yn = gets.chomp
if yn != "no"
puts "What else?"
array = [gets]
yn = gets.chomp
STDERR.puts "array is #{array.inspect}"
STDERR.puts "yn is #{yn.inspect}"
end

Wtedy mam nadzieję, że zdasz sobie z tego sprawę array i yn obaj otrzymują dane wejściowe, które nie miałyby sensu.

Aby uzyskać więcej wskazówek, jak debugować kod Ruby, zobacz Jak debugować skrypty Ruby?


1 dla odpowiedzi nr 3
while yn != "no"
array << yn
print "What else? "
yn = gets.chomp
end

„<<” dołącza yn do twojej tablicy. (Jedyny powód, dla którego użyłem print dzieje się tak, ponieważ umieszcza kursor bezpośrednio obok znaku zapytania zamiast w następnej linii. Nie ma innego powodu)


1 dla odpowiedzi nr 4
#encoding:utf-8

x = Array.new
puts "enter something:".capitalize
y = ""
while y !=#nill
y = gets.chomp
x.push y
end
x.delete ("")
x.compact
puts "You entered: " + x.sort.to_s
puts "Objects in array: " + x.size.to_s
#made by ~Pick@chu!!!

1 dla odpowiedzi nr 5

Miałem ten sam problem. Oto, gdzie skończyłem (myślę, że spełnia wszystkie specyfikacje z pytania):

puts "Type in as many words as you"d like. When you"re finished, press enter on an empty line"
array = []
input = " "
while input != ""
input = gets.chomp
array.push input
end

puts
puts array.sort

0 dla odpowiedzi № 6

Innym sposobem odczytania „tablic” z konsoli może być:

1: print “enter the values: ”
2: a = gets.chomp # input: “tom mark rosiel suresh albert”
3: array = a.split(‘ ‘) # .split() method return an array
4: p array # ["tom, "mark, "rosiel", "suresh", "albert"]

now, lets say you want an array of integers, all you have to do is:

# input “1 2 3 4 5″
3: array = a.split(‘ ‘).map{ |value| value.to_i }
4: p array # [1, 2, 3, 4, 5]

the clue here is to use a standard separator in order to use the .split() function.

0 dla odpowiedzi № 7

oto jak zrobiłem ten program:

array = [ ]
input = gets.chomp
while
input != ""
array.push input
input = gets.chomp
end
puts array
puts
puts array.sort