#scala
#scala
Вопрос:
У меня есть несколько строк в качестве входных данных, и я хочу прочитать и распечатать одно и то же. Проблема в том, что я не знаю, как! ( readLine
) Ввод поступает от пользователя, вводящего в терминале.
первое целое число — это общее количество строк!
ввод:
4
word
localization
internationalization
вывод:
word
localization
internationalization
Комментарии:
1. ввод поступает от пользователя, вводящего данные в терминал. Потому что readLine получает входные данные
2.
readLine
считывает строку из стандартного интерфейса. Что в этом не сработало?3. Я хочу, чтобы программа считывала несколько строк одновременно! readLine считывает только одну строку
4. 2 варианта: вызвать
readLine
несколько раз или написать собственную утилиту на основеInputStream
Ответ №1:
Что-то вроде
// default condition: string is not empty, not inclusive!
class TermLines (cond: (String => Boolean) = _ != "") extends Iterator[String] {
var s = readLine;
def hasNext = cond(s);
def next = { var r = s; s = readLine; r }
}
Затем назовите это как
println((new TermLines).toVector.mkString("n")) // till empty
или
println(new TermLines(_.last != '.').toVector.mkString("n")) // till last is dot
Комментарии:
1. это прекрасно
Ответ №2:
Решено!
import scala.io.StdIn
object Solution extends App
{
val numOfLines = StdIn.readInt()
def words: Seq[String] = for (_ <- 1 to numOfLines) yield StdIn.readLine()
def sort = words.map
{
case word => word
}
sort.foreach(println)
}
Комментарии:
1.
.map()
Вызов ничего не делает, поэтомуsort
он точно такой же, какwords
.2. Это не весь код. Я вырезал код. регистр слова, если слово. длина> 10 => (s»$ {word.head}${(word. длина — 2).toString}${word.last}») регистровое слово => слово. Но вы ПРАВЫ!
3. Два набора скобок
()
не нужны, а ненужный.toString
. ИспользованиеreadInt()
опасно. Рад, что это работает для вас, но это не очень хорошее решение для фактического вопроса, как указано.