Question :
PatternMatchingType takes an integer input from command line. Based on the input, write a code for two match cases. In the first case based on the input1 from command line, convert initial to integer if input is 1 , double if input is 2 , and ‘String’ for any other input, and assign it to change . In the second match case based on type of change, print Integer is given if integer , Double is given if double and String is given if String .
Code
object PatternMatchingType{
def main(args :Array[String]){
val input1 = args(0).toInt
val initial = “12345”
var change : Any = 0
//write your code here
println(change.getClass)
}
}
I tried below code but not working
object PatternMatchingType{
def main(args :Array[String]){
val input1 = args(0).toInt
val initial = “12345”
var change : Any = 0
input1 match {
case a if input1== 1 => input1.asInstanceOf[Int]
case b if input1 == 2 => input1.asInstanceOf[Double]
case c if input 1== 3 => input1.asInstanceOf[String]
println(change.getClass)
}
}
Please advise on above code
Hi, first as an advice, you can format your code like this:
```scala
// Your code here.
```
Second, asInstanceOf doesn’t really do anything. It just tells the compiler to shut up and believe what you say.
For example, imagine a situation like this:
val anAny: Any = 10
va anInt: Int = anAny.asInstanceOf[Int]
Here the compiler would have rejected the program, since an Any can not be (safely) passed when an Int is expected. But the asInstanceOf just forces the compiler to believe.
In this particular case, it would work in runtime, since actually anAny is an instance of Int, but if it would have been any other thing, it would have failed (as you have already seen).
In general, asInstanceOf is very unsafe and usually useless, especially for a beginner. My advice is to forget it exists, if you are in a situation when you need it, then you have a design problem.
Now, returning to your question. Your intuition is good, but you need a real transformation function.
You can find them on the documentation.
PS: The idea of pattern matching is match a pattern.
case a if input1== 1 => is redundant, you can just case 1 => 
Problem Statement
PatternMatchingType takes an integer input from command line. Based on the input, write a code for two match cases. In the first case based on the input1 from command line, convert initial to integer if input is 1 , double if input is 2 , and ‘String’ for any other input, and assign it to change . In the second match case based on type of change, print Integer is given if integer , Double is given if double and String is given if String .
Code Tried
object PatternMatchingType{
def main(args :Array[String]){
val input1 = args(0).toInt
val initial = “12345”
var change : Any = 0
input1 match {
case 1 => println(“Integer” , +initial.toInt)
println(change.getClass)
}
}}
Expected Output :
String is given
Class java .lang.String
It is not working
Please advise
Here is how you want to structure your code
val change = input1 match {
// todo insert your match statements here
}
change match {
// todo insert your second match statements here
}
you should try and avoid var when writing functional code
I am trying with below code but not working . Please advise
Problem Statement
PatternMatchingType takes an integer input from command line. Based on the input, write a code for two match cases. In the first case based on the input1 from command line, convert initial to integer if input is 1 , double if input is 2 , and ‘String’ for any other input, and assign it to change . In the second match case based on type of change, print Integer is given if integer , Double is given if double and String is given if String .
Code Tried
object PatternMatchingType{
def main(args :Array[String]){
val input1 = args(0).toInt
val initial = “12345”
var change : Any = 0
input1 match {
case 1 => initial.toInt
println (“Integer”)
println(change.getClass)
case 2 => initial.toDouble
println (“Double”)
println(change.getClass)
case 3 => initial.toString
println (“String”)
println(change.getClass)
}
}}
Expected Output
String is given
Class java .lang.String
Please advise
the problem there is that you are using a var but not reassigning it based on the input.
you would need to do change = initial.toInt in case 1. change = initial.toDouble in case 2 and so on. But as i said before this isn’t recommended in functional programming.
tried using val as well and initial.toInt
but not getting output as below
String is given
Class java .lang.String
perhaps its best if you go through some pattern matching tutorials
I could just give you the answer but that would rob you of the chance to discover it yourself. Here is the scala tour page related to pattern matching
https://docs.scala-lang.org/tour/pattern-matching.html
its worth saying as well that you should split out what you need to do. first of all take the input and create the changed value. Once you’ve done that focus on pattern matching on the changed value to generate the println output
I have tried as advised and also got the required OUTPUT . But it is not getting marked as completed.
Please advise me as I have come till here . Again I am posting
Problem Statement
PatternMatchingType takes an integer input from command line. Based on the input, write a code for two match cases. In the first case based on the input1 from command line, convert initial to integer if input is 1 , double if input is 2 , and ‘String’ for any other input, and assign it to change . In the second match case based on type of change, print Integer is given if integer , Double is given if double and String is given if String .
Expected Output
String is given
Class java .lang.String
Code I tried
object PatternMatchingType{
def main(args :Array[String]){
val input1 = args(0).toInt
val initial = “12345”
var change : Any = 0
input1 match {
case 1 => initial.toInt
println (“Integer”)
println(change.getClass)
case 2 => initial.toDouble
println (“Double”)
println(change.getClass)
case 3 => initial.toString
change ="String"
println (“String is given”)
println(change.getClass)
}
}}
Please advise
“case _” instead of “case 3” then it will work
Thanks a lot !! It worked 
It still not working the code which was posted earlier
object PatternMatchingType{
def main(args :Array[String]){
val input1 = args(0).toInt
val initial = “12345”
var change : Any = 0
input1 match {
case 1 => initial.toInt
println(“Integer is given”)
println(change.getClass)
case 2 => initial.toDouble
println(“Double is given”)
println(change.getClass)
case 3 => initial.toString
change =“String”
println(“String is given”)
println(change.getClass)
}
}
}
[quote=“sourav1311, post:13, topic:6046”]
object PatternMatchingType{
def main(args :Array[String]){
val input1 = args(0).toInt
val initial = “12345”
var change : Any = 0
input1 match {
case 1 => initial.toInt
println(“Integer is given”)
println(change.getClass)
case 2 => initial.toDouble
println(“Double is given”)
println(change.getClass)
case _ => initial.toString
change =“String”
println(“String is given”)
println(change.getClass)
}
}
}
this one is correct