First day and first attempt at using Scala - so go easy on me! I\'m trying to rewrite some old Java code I have which is simply a function which takes two numbers and prints
for (i <- (6 to 3 by -1)) {println ("i: " + i)}
i: 6
i: 5
i: 4
i: 3
If you happen to forget by -1
, you can move up and use a function, to revert the result:
for (i <- (3 to 6)) {println ("i: " + ((6+3) - i))}
To exclude the second boundary, use until
:
for (i <- (6 until 3 by -1)) {println ("i: " + i)}
i: 6
i: 5
i: 4
Alternatively, you could define an Iterator for your purpose. Extending an Iterator is easy; just implement 'hasNext:Boolean' and 'Next:[T]', where T is the type to handle - in our case Int or maybe Long or BigInt:
class FromToIterator (start: Int, stop: Int) extends Iterator [Int] {
var current = start
// 3 6 3 6 6 3 6 3
def hasNext : Boolean = ((start < stop && current <= stop) || (start > stop && current >= stop))
def next: Int = {
val res = current
if (start < stop) current += 1 else current -= 1
res
}
}
val it = new FromToIterator (3, 6)
val ti = new FromToIterator (6, 3)
for (i <-it) println (i)
for (i <-ti) println (i)
def printInDecreasingOrder(start : Int, end : Int){
if(start > end ){
for(i <- start to end by -1){
println(s"Current value (decreasing from $start to $end) is $i")
}
}else{
println("first num is smaller than second")
}
}
method call:
printInDecreasingOrder(10, 2)
Result:
Current value (decreasing from 10 to 2) is 10
Current value (decreasing from 10 to 2) is 9
Current value (decreasing from 10 to 2) is 8
Current value (decreasing from 10 to 2) is 7
Current value (decreasing from 10 to 2) is 6
Current value (decreasing from 10 to 2) is 5
Current value (decreasing from 10 to 2) is 4
Current value (decreasing from 10 to 2) is 3
Current value (decreasing from 10 to 2) is 2
printInDecreasingOrder(1, 10)
Result:
first num is smaller than second
A point to add to this answer, if you do something like this
for(j <- finish to start){......}
sbt does not even show the error. So if you want a decrementing for loop you need to do this
for(j <- finish to start by -1){.......}
This way you can use Decreasing for loop in Scala.
object Example extends App {
for(i <- 20 to 2 by -2){
println("Value of i = "+ i)
}
}
------------------
O/P
------------------
Value of i = 20
Value of i = 18
Value of i = 16
Value of i = 14
Value of i = 12
Value of i = 10
Value of i = 8
Value of i = 6
Value of i = 4
Value of i = 2
highnum to lownum by -1 (switch with other negative or positive step to change stepping)
def decrement(start: Int, finish: Int) = {
for (i <- start to finish by -1) {
println("Current value (decreasing from "+start+" to "+finish+") is "+i)
}
}
I think this is a dupe of Scala downwards or decreasing for loop?
Here is a global increment/decrement solution inspired by Scala downwards or decreasing for loop?:
def goThrough(start: Int, finish: Int) = {
val d = if(start<=finish) 1 else -1
for (i <- start to finish by d) {
println("Current value (increasing from "+start+" to "+finish+") is "+i)
}
}