Decreasing for loop in Scala?

前端 未结 8 930
一生所求
一生所求 2020-12-17 20:24

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

相关标签:
8条回答
  • 2020-12-17 21:05
    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)
    
    0 讨论(0)
  • 2020-12-17 21:05
    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

    0 讨论(0)
  • 2020-12-17 21:08

    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){.......}
    
    0 讨论(0)
  • 2020-12-17 21:12

    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
    
    0 讨论(0)
  • 2020-12-17 21:16

    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?

    0 讨论(0)
  • 2020-12-17 21:25

    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)
      } 
    }
    
    0 讨论(0)
提交回复
热议问题