2016-12-22 36 views
13

में कंसोल इनपुट पढ़ना मैं कोटलिन में कंसोल से इनपुट स्वीकार करने का प्रयास कर रहा हूं लेकिन यह मुश्किल है क्योंकि मैं वाक्यविन्यास के बारे में भी निश्चित नहीं हूं।कोटलिन

मैं मुख्य

fun main(args: Array<String>) { 

} 

क्या मैं इस के बाद में प्रवेश करना चाहिए के साथ शुरू? मुझे पता है कि println() और readline() शामिल हैं लेकिन मुझे नहीं पता कि उन्हें कैसे व्यवस्थित किया जाए।

उद्देश्य: त्वरित उपयोगकर्ता को संख्या दर्ज करने के लिए, दर्ज की गई संख्या 6 से गुणा हो जाती है, प्रोग्राम परिणाम को कंसोल डिस्प्ले पर लौटाता है।

+0

यह एक होमवर्क है? – miensol

+0

@miensol नहीं, बस मुझे एक नई भाषा सीखने की कोशिश कर रहा है – siur

उत्तर

28

यहाँ Kotlin में ए + बी उदाहरण हैं:

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

या

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

या

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

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

या

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) 
} 

या

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

खबरदार कि Scannersomewhat slow है। यह कुछ मामलों में महत्वपूर्ण हो सकता है जैसे कि प्रतिस्पर्धी प्रोग्रामिंग जहां बड़े इनपुट पर प्रोग्राम का निष्पादन सादा readLine के साथ Scanner को प्रतिस्थापित करके दो गुना तेजी से किया जा सकता है।

I hope किसी दिन कंसोल और फाइल इनपुट पार्सिंग समर्थन दोनों के लिए एक संक्षिप्त, क्रॉसप्लेटफार्म, प्रदर्शनकर्ता, सार्वभौमिक कोटलिन stdlib में पेश किया जाएगा। readInt, readLong, आदि वैश्विक और Reader एक्सटेंशन फ़ंक्शंस की तरह।


बोनस

कभी-कभी आप कंसोल इनपुट/आउटपुट के साथ शुरू है, लेकिन फिर फ़ाइलों पर स्विच करने की जरूरत है। फ़ाइल स्ट्रीम चर के साथ प्रत्येक पढ़ने या लिखने के कॉल को प्रीपेड करने के लिए यह बहुत कठिन हो जाता है।

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) 
    } 
} 

रैपिंग लाइनों हो सकता है:

यहाँ Kotlin जादू की शांति है कि ठीक से बंद हो जाती हैं बस इसे पढ़ सकते हैं और फ़ाइलों को भी वे सुनिश्चित करने के लिए लिखने के लिए मजबूर करने की लाइनों के एक जोड़े के साथ अपरिवर्तित सांत्वना कोड रैप करने के लिए अनुमति देता है कंसोल पर वापस स्विच करने की आवश्यकता होने पर तुरंत टिप्पणी की गई।

+0

धन्यवाद। क्या मेरे पास यह लिंक हो सकता है? – siur

+0

@siur, https: //discuss.kotlinlang।संगठन/टी/लेने-इनपुट/152/2, https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.io/read-line.html, https://github.com/JetBrains/ कोटलिन/ब्लॉब/मास्टर/लाइब्रेरी/stdlib/src/kotlin/io/Console.kt – Vadzim

+0

यहां अधिक वास्तविक उदाहरण हैं: http://codeforces.com/blog/entry/45454?#comment-300490 – Vadzim

2

उपयोग ReadLine() उपयोगकर्ता से इनपुट लेने के लिए, 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() 
}