首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用随机唯一数字从大小(等于用户输入)填充数组?克洛尔

如何使用随机唯一数字从大小(等于用户输入)填充数组?克洛尔
EN

Stack Overflow用户
提问于 2017-02-01 14:03:25
回答 1查看 292关注 0票数 0

目前正在编程的bubblesort算法。我找到了某个网站的源代码:

代码语言:javascript
运行
复制
Scanner sc = new Scanner(System.in);
System.out.println("Enter the size of the array which you would like to create: ");

应用程序现在所做的是,它接受用户的输入号。并制造一系列随机数。使用这个数组,它应用了Bubblesort算法。

现在,我正试图把这个翻译成Clojure。我知道用户输入可以通过以下功能来实现:

代码语言:javascript
运行
复制
Flush

代码语言:javascript
运行
复制
read-line

除此之外,我不明白如何获得所需数组大小的用户输入,然后创建一个随机数数组,然后应用冒泡排序。到目前为止,这就是我所拥有的(Bubblesort从rosetta网站上找到的):

代码语言:javascript
运行
复制
 (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")

需要:

  • 用户输入
  • 创建用户输入大小的随机数数组。

提前感谢!

编辑:

用户输入:

代码语言:javascript
运行
复制
    def(input
      (println "Enter the size of the array: ")
    )
    println(read-line)

输入应该决定数组的大小。

其余部分:

使用输入表示的大小的唯一随机数填充数组。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-01 19:05:04

使用read-line读取输入后,可以使用read-string将其解析为整数,然后使用rand生成随机数。之后,使用to-array将它们转换为Java数组。下面的函数将提示用户输入数组大小,并将随机数数组从0返回到1:

代码语言:javascript
运行
复制
(defn random-array-prompt []
  (print "Enter array size:")
  (let [n (read-string (read-line))]
    (to-array (repeatedly n rand))))

之后,可以在repl中调用该函数:

代码语言:javascript
运行
复制
(println (seq (bubble-sort (random-array-prompt))))

这将提示您输入大小并打印排序序列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41981700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档