2017-02-01 2 views
0

в настоящее время программирует алгоритм bubblesort. я нашел исходный код кого-то в Интернете:Как заполнить массив из размера (равный пользовательскому вводу) со случайными уникальными номерами? CLOJURE

Scanner sc = new Scanner(System.in); 
System.out.println("Enter the size of the array which you would like to create: "); 

Что теперь приложение делает, это то, что он принимает входной номер пользователя. И делает массив случайных чисел. Используя этот массив, он применяет алгоритм Bubblesort.

Теперь, я пытаюсь перевести это на Clojure. Я знаю, что пользовательский ввод может быть достигнут с помощью функций:

Flush 

и

read-line 

Кроме того, я не понимаю, как получить ввод пользователя для требуемого размера массива, затем создайте массив случайных чисел, а затем примените сортировку пузырьков. До сих пор, это то, что у меня есть (BubbleSort нашел с сайта Розеттский.):

(ns BubbleSort 
    (:import java.util.ArrayList) 
    (:import (java.util Date))) 

(defn safe-println [& more] 
    (.write *out* (str (clojure.string/join " " more) "\n"))) 


; set a timestamp 
(defn restart-profiling [] 
    (def last-time-stamp (atom (System/nanoTime)) 
    ) 
) 

; get ms since last timestamp 
(defn get-delta-ms [] 
    (let [last @last-time-stamp 
     current (System/nanoTime) 
     ticks (- current last) 
     ] 

    (restart-profiling) 
    (float (/ ticks 1000000)) ; calculate the delta in milliseconds 
    ) 
) 


(defn bubble-sort 
    "Sort in-place. 
    arr must implement the Java List interface and should support 
    random access, e.g. an ArrayList." 
    ([arr] (bubble-sort compare arr)) 
    ([cmp arr] 
    (letfn [(swap! [i j] 
      (let [t (.get arr i)] 
       (doto arr 
       (.set i (.get arr j)) 
       (.set j t)))) 
      (sorter [stop-i] 
      (let [changed (atom false)] 
       (doseq [i (range stop-i)] 
       (if (pos? (cmp (.get arr i) (.get arr (inc i)))) 
        (do 
        (swap! i (inc i)) 
        (reset! changed true)))) 
       @changed))] 
    (doseq [stop-i (range (dec (.size arr)) -1 -1) 
      :while (sorter stop-i)]) 
    arr))) 

(restart-profiling) 
(println (bubble-sort (ArrayList. [10 9 8 7 6 5 4 3 2 1 
            10 9 8 7 6 5 4 3 2 1 
            10 9 8 7 6 5 4 3 2 1 
            10 9 8 7 6 5 4 3 2 1 
            10 9 8 7 6 5 4 3 2 1 
            10 9 8 7 6 5 4 3 2 1 
            10 9 8 7 6 5 4 3 2 1 
            10 9 8 7 6 5 4 3 2 1 
            10 9 8 7 6 5 4 3 2 1 
            10 9 8 7 6 5 4 3 2 1 
            10 9 8 7 6 5 4 3 2 1 
            10 9 8 7 6 5 4 3 2 1 
            10 9 8 7 6 


            ]))) 

(safe-println "The serial implementation "(get-delta-ms) "ms") 

Нужно:

  • пользователем вход
  • создает массив случайных чисел размера пользовательского ввода

Заранее благодарен!

РЕДАКТИРОВАТЬ:

пользователем вход:

def(input 
     (println "Enter the size of the array: ") 
    ) 
    println(read-line) 

вход должен определить размер массива.

Оставшаяся часть:

Заселите массив с уникальными случайными числами размера, представленным вводом.

ответ

1

После того, как вы прочитали ввод с помощью read-line, вы можете разделить его на целое число с read-string, а затем использовать rand для генерации случайных чисел. После этого преобразуйте их в массив Java, используя to-array. Ниже функция будет запрашивать у пользователя размером массива и возвращает массив случайных чисел от 0 до 1:

(defn random-array-prompt [] 
    (print "Enter array size:") 
    (let [n (read-string (read-line))] 
    (to-array (repeatedly n rand)))) 

После этого, можно назвать эту функцию в REPL:

(println (seq (bubble-sort (random-array-prompt)))) 

Это будет запросите размер и распечатайте отсортированную последовательность.

+0

Благодарим вас за комментарий. Я совершенно новичок в clojure, возможно, я не понимаю это правильно, но это не работает? Какие-нибудь советы? – lilienfa

+0

Не могли бы вы уточнить - вы получаете сообщение об ошибке и т. Д.? –

+0

Исключение в потоке «main» java.lang.RuntimeException: EOF во время чтения, thats сообщение об ошибке, которое я получаю. – lilienfa

Смежные вопросы