💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱۶ Arman
متغیرها در کاتلین
جامعه کاتلین ایجاد شده در ۳۰ دی ۱۴۰۲

سلام و عرض ادب

2 تا سوال دارم 

یکی اینکه در زبان کاتلین چطور میتونیم از کاربر یک ورودی بگیریم؟مثلا میخوایم یه عدد از ورودی بگیریم و 2 برابرش کنیم و نهایتا حاصلش رو به کاربر نمایش بدیم

دوم بحث type casting  هست. اینو هم یه توضیحی بدین 

خیلی ممنون

 

درود

1. برای گرفتن ورودی رشته میتونید از readline به صورت زیر استفاده کنید:

var input = readLine()
print("You entered: $input")

اما اگر رشته نباشه، باید کتابخانه scanner رو ایمپورت کنید:

import java.util.Scanner;
Scanner(System.`in`)
var enteredNumber1:Int = number1.nextInt()
println("You entered: $enteredNumber1")

 

2. برای تبدیل به انواع مختلف داده داریم:

1. toChar() – To convert a type to Char type.
2. toInt() – To convert a type to Int type.
3. toLong() – To convert a type to Long type.
4. toFloat() – To convert a type to Float type.
5. toDouble() – To convert a type to Double type.
6. toByte() – To convert a type to Byte type.
7. toShort() – To convert a type to Short type.

 

نازنین کریمی مقدم ۳۰ دی ۱۴۰۲، ۱۲:۰۴
fun calculateFactorial(n: Int): Long {
   // Implement the logic to calculate the factorial of 'n'
   // Return the result as a Long
}
fun main() {
   // Get user input for the number
   print("Enter a positive integer: ")
   val input = readLine()?.toIntOrNull()
   if (input != null && input >= 0) {
       // Call the calculateFactorial function and print the result
       val result = calculateFactorial(input)
       println("The factorial of $input is: $result")
   } else {
       println("Please enter a valid non-negative integer.")
   }
}

 

این کد رو من به عنوان تمرین توی ChatGPT دیدم این الان نحوه گرفتن ورودیش و type casting ش برام واضح نیست!!!

میشه یه توضیح مختصر بدین؟

 

Arman ۳۰ دی ۱۴۰۲، ۱۲:۱۵

هر دوتا روشی که برای گرفتن ورودی گفتید رو توی IntelliJ امتحان کردم هر دوتاشون error میدن

Arman ۳۰ دی ۱۴۰۲، ۱۳:۳۶

1. در کد chatgpt در این خط ورودی رو میگیره (readLine) و همونجا به عدد تبدیلش میکنه (toIntOrNull):

readLine()?.toIntOrNull()

2. متن خطاهایی که میگیرید رو دقیق اینجا بفرستید.

نازنین کریمی مقدم ۰۱ بهمن ۱۴۰۲، ۰۶:۵۷
package com.company
import java.util.Scanner;
fun main() {
    Scanner(System.`in`)
    val number1 = null
    var enteredNumber1:Int = number1.nextInt()
    println("You entered: $enteredNumber1")
}

 

Unresolved reference: number1

این اولین error بود که دریافت کردم

بعد از اون

package com.company
import java.util.Scanner;
fun main() {
    Scanner(System.`in`)
    val number1 = null
    var enteredNumber1:Int = number1.nextInt()
    println("You entered: $enteredNumber1")
}

 

error قبلی نبود 

Unresolved reference: nextInt

این error رو بهم داد

الان دیگه نمیدونم چیکار کنم

 

Arman ۰۱ بهمن ۱۴۰۲، ۰۷:۰۸

توی Source code  اولی خط val number1 = null  نبود توی دومی اضافه کردم

 

Arman ۰۱ بهمن ۱۴۰۲، ۰۷:۱۱

متوجه شدم. من کد رو کامل ننوشتم و شبه کدی توضیح دادم اگر همونو بزنید خطا میگیرید :)))

برای مثال کد کاملش اینه:

import java.util.Scanner;
fun main() {
    val reader = Scanner(System.`in`)
    print("Enter a number: ")
    var num1:Int = reader.nextInt()
    println("You entered: $num1")
}

و خروجی به این شکل میشه:

image-HkpJ.png
نازنین کریمی مقدم ۰۱ بهمن ۱۴۰۲، ۰۷:۴۴
package com.company
import  java.util.Scanner
fun main() {
    val reader = Scanner(System.`in`)
    print("Enter your point: ")
    val userInput:Double = reader.nextDouble()
    println("You entered: $userInput")
}

چرا کد بالا به من error پایینی رو میده؟

Enter your point: 10.5
Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:947)
    at java.base/java.util.Scanner.next(Scanner.java:1602)
    at java.base/java.util.Scanner.nextDouble(Scanner.java:2573)
    at com.company.MainKt.main(Main.kt:7)
    at com.company.MainKt.main(Main.kt)
Process finished with exit code 1
Arman ۰۱ بهمن ۱۴۰۲، ۱۱:۲۹

احتمالا مربوط به تنظیمات زبان سیستم تون باشه:

https://stackoverflow.com/questions/54995386/exception-in-thread-main-java-util-inputmismatchexception-error

من کدتون رو با این کامپایلر آنلاین تست کردم و مشکلی نداره:

https://onecompiler.com/kotlin

نازنین کریمی مقدم ۰۱ بهمن ۱۴۰۲، ۱۲:۱۲

خیلی عجیبه من توی همین کامپایلر آنلاین که خودتون میگین تست میکنم و همون error داخل IntelliJ رو بهم میده.

import  java.util.Scanner
fun main() {
   val reader = Scanner(System.`in`)
   print("Enter your point: ")
   val userInput:Double = reader.nextDouble()
   println("You entered: $userInput")
}

این هم error که بهم میده

Enter your point: 
Exception in thread "main" java.util.NoSuchElementException at java.base/java.util.Scanner.throwFor(Scanner.java:937) at java.base/java.util.Scanner.next(Scanner.java:1594) at java.base/java.util.Scanner.nextDouble(Scanner.java:2564) at MainKt.main(Main.kt:5) at MainKt.main(Main.kt)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.jetbrains.kotlin.runner.AbstractRunner.run(runners.kt:64)
	at org.jetbrains.kotlin.runner.Main.run(Main.kt:149)
	at org.jetbrains.kotlin.runner.Main.main(Main.kt:159)

Kotlin Online Compiler

Arman ۰۱ بهمن ۱۴۰۲، ۱۲:۳۷

با یه سیستم دیگه تست کنید (مثلا گوشی)

و اول عدد رو وارد کنید و بعد گزینه ران رو بزنید.

نازنین کریمی مقدم ۰۲ بهمن ۱۴۰۲، ۱۱:۰۴

با گوشی هم بهم error میده،نمیدونم چرا

Arman ۰۲ بهمن ۱۴۰۲، ۱۱:۲۲
import java.util.InputMismatchException
import java.util.Scanner
fun main() {
    val reader = Scanner(System.`in`)
    print("Enter your point: ")
    try {
        val userInput: Double = reader.nextLine().toDouble()
        println("You entered: $userInput")
    } catch (e: NumberFormatException) {
        println("Invalid input. Please enter a valid number.")
    } catch (e: InputMismatchException) {
        println("Invalid input. Please enter a valid number.")
    } finally {
        reader.close()
    }
}

 

 دیشب  ChatGPT این کد رو بهم داد،البته بعد از اینکه چندبار کدش رو تغییر داد،در واقع کد اولی که بهم داد error  داد چند بار ازش خواستم کد رو تغییر بده تا این کد رو بهم داد و درست کار کرد اما مشکل اینه چون تازه یادگیری رو شروع کردم خیلی از keyword‌ها رو هنوز نمیشناسم و  کد بالایی رو هم متوجه نشدم،بهم توضیحش بدین 

 

بعد یه مورد دیگه هم هست من چند وقت پیش با آقای موحد صحبت تلفنی داشتم

به من برای  همکاری با مجموعه پیشمهادی دادن،منتها من بخاطر امتحانات دانشگاه نتونستم پیگیری کنم الان که امتحاناتم تموم شده وقت کردم مسئله رو پیگیری کنم ولی به آقای موحد تو تلگرام پیام دادم  چندوقتی میشه تلگرامشون رو چک نکردن.گفتم اگر امکانش هست به ایشون اطلاع بدین،خیلی ممنون

Arman ۰۲ بهمن ۱۴۰۲، ۱۱:۳۸

سلام صبح بخیر و خسته نباشید خودم متوجه مشکلی که سورس کدم داشت شدم 

لطف کردید و ممنون بابت پیگیری تون 

Arman ۰۳ بهمن ۱۴۰۲، ۰۴:۴۹

سلام مجدد پوزش بابت تاخیر در پاسخگویی

خوشحالم مشکلتون حل شد، پیامتون رو هم به آقای موحد ارسال کردم.

نازنین کریمی مقدم ۰۷ بهمن ۱۴۰۲، ۱۰:۵۶

خیلی ممنونم لطف کردید 

 

Arman ۰۷ بهمن ۱۴۰۲، ۱۱:۰۱