2016-12-22 31 views
13

Tôi đang cố gắng chấp nhận đầu vào từ bảng điều khiển trong Kotlin nhưng rất khó vì tôi không quá chắc chắn về cú pháp.Đọc đầu vào bảng điều khiển ở Kotlin

Tôi bắt đầu với chính

fun main(args: Array<String>) { 

} 

GÌ Tôi nên nhập sau này? Tôi biết rằng println()readline() có liên quan nhưng tôi không biết cách cấu trúc chúng.

Mục tiêu: nhắc người dùng nhập số, số được nhập được nhân với 6, chương trình trả về kết quả cho màn hình bảng điều khiển.

+0

Đây có phải là một bài tập về nhà? – miensol

+0

@miensol Không chỉ tôi đang cố gắng học một ngôn ngữ mới – siur

Trả lời

28

Dưới đây là A + B ví dụ trong Kotlin:

fun main(vararg args: String) { 
    val (a, b) = readLine()!!.split(' ') 
    println(a.toInt() + b.toInt()) 
} 

hoặc

fun main(vararg args: String) { 
    val (a, b) = readLine()!!.split(' ').map(String::toInt) 
    println(a + b) 
} 

hoặc

fun readInts(separator: Char = ' ') = readLine()!!.split(separator).map(String::toInt) 

fun main(vararg args: String) { 
    val (a, b) = readInts() 
    println(a + b) 
} 

hoặc

import java.util.Scanner 

fun main(vararg args: String) { 
    val input = Scanner(System.`in`) 
    val a = input.nextInt() 
    val b = input.nextInt() 
    println(a + b) 
} 

hoặc

with(Scanner(System.`in`)) { 
    val a = nextInt() 
    val b = nextInt() 
    println(a + b) 
} 

Ghi chú rằng Scannersomewhat slow. Điều này có thể quan trọng trong một số trường hợp như lập trình cạnh tranh trong đó thực thi chương trình trên các đầu vào lớn có thể được thực hiện nhanh hơn gấp hai lần chỉ bằng cách thay thế Scanner bằng đồng bằng readLine.

I hope một ngày nào đó một bản tóm tắt, nền tảng, hiệu suất, phổ quát cho cả hỗ trợ phân tích cú pháp đầu vào của bàn điều khiển và tệp sẽ được giới thiệu trong Kotlin stdlib. Giống như readInt, readLong, v.v. toàn cầu và Reader chức năng mở rộng.


Bonus

Đôi khi bạn bắt đầu với giao diện điều khiển đầu vào/đầu ra nhưng sau đó cần phải chuyển sang tập tin. Nó trở nên quá tẻ nhạt để thêm vào mỗi lần đọc hoặc ghi cuộc gọi với biến luồng tệp.

Đây là một sự yên Kotlin kỳ diệu mà cho phép chỉ gói mã giao diện điều khiển không thay đổi với một vài dòng để buộc nó đọc và ghi vào file cũng đảm bảo họ được đóng lại đúng cách:

fun <T : Closeable, R> T.useWith(block: T.() -> R): R = use { with(it, block) } 

File("a.in").bufferedReader().useWith { 
    File("a.out").printWriter().useWith { 
     val (a, b) = readLine()!!.split(' ').map(String::toInt) 
     println(a + b) 
    } 
} 

Scanner(File("b.in")).useWith { 
    PrintWriter("b.out").useWith { 
     val a = nextInt() 
     val b = nextInt() 
     println(a + b) 
    } 
} 

dòng Bao bì có thể nhanh chóng nhận xét khi xảy ra sự cần thiết phải chuyển về bàn điều khiển.

+0

Cảm ơn bạn. Tôi có thể liên kết đến những thứ này không? – siur

+0

@siur, https: //discuss.kotlinlang.org/t/tham gia đầu vào/152/2, https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/read-line.html, https://github.com/JetBrains/ kotlin/blob/master/library/stdlib/src/kotlin/io/Console.kt – Vadzim

+0

Dưới đây là các ví dụ thực tế hơn: http://codeforces.com/blog/entry/45454?#comment-300490 – Vadzim

2

Sử dụng readLine() để lấy đầu vào từ người dùng, ATQ:

fun main(args:Array<String>){ 
    print("Enter a number") 
    var variableName:Int = readLine()!!.toInt() // readLine() is used to accept the String value and ".toInt()" will convert the string to Int. 
    var result:Int= variableName*6 
    print("The output is:$result") 
    } 
1
fun readInts(separator: Char = ' ') = 
readLine()!!.split(separator).map(String::toInt) 
fun main(args: Array<String>) { 
    var A : List<Int> = readInts() 
} 
Các vấn đề liên quan