多重循环的例子:
当有一个双重配套循环想要观察输出几次,可以敲出以上代码:
object base26 {
def main(args: Array[String]): Unit = {
for (i <- 1 to 5) {
println(i) // 输出几次? 它由哪个循环变量的值所决定?
for (j <- 10 to 15) {
println(i,j)
}
}
}
}
运行结果如图所示:
可以看出,println(i)是外层的for循环,它可以输出(1,2,3,4,5)由循环变量i的值所决定。
println(j)是里层的for循环,会根据外层的循环变量i输出的结果改变,因为println(j)会执行6次,所以总共会执行30次,由外层循环变量i和内层循环变量j共同决定。
当我在上面的双重循环里面再加一个循环将它变成三重,可以敲出以下代码:
object base26 {
def main(args: Array[String]): Unit = {
var k = 0
for (i <- 0 to 5) { // 外层循环
println(i) // 输出几次? 它由哪个循环变量的值所决定?
for (j <- 10 to 15) { // 内层循环
k = k + 1
println(k,i,j) // 输出几次,它由什么值决定
}
}
}
}
运行结果如图所示:
循环变量i和循环变量j上面有同理,外层循环执行6次,每次外层循环时内层循环执行10次,所以println(k, i, j)会输出 10×20=200 次,输出次数由外层循环变量 i 和内层循环变量 j 的值共同决定,同时还涉及变量 k(不过从代码片段看 k 初始值等未完全展示,但次数由 i 和 j 循环次数决定),会依次输出不同 k、i、j 组合的值
当我想要对12345做出一些循环时,可以输出以下代码:
/**
* println("1")
* println("22")
* println("333")
* println("4444")
* println("55555")
*
* 11111
* 2222
* 333
* 44
* 5
*
* 1
* 12
* 123
* 1234
* 12345
*
*/
object base27 {
def main(args: Array[String]): Unit = {
for (i <- 0 to 5) { // 外层循环
for (j <- 1 to i) { // 每行输出几个数字
print(i)
}
println()// 换行
}
}
}
运行结果如图所示:
当我需要弄出一个99乘法表时,根据格式
可以敲击以下代码:
object base28 {
def main(args: Array[String]): Unit = {
for (i <- 0 to 9) {
for (j <- 1 to 9) {
// printf(s"${j}${i}=${i*j} *)
printf("%d*%d=%-4d", j, i, i*j)
/**
* %d: 占位置, 会输出一个整数
* %-4d: 占位置, 会输出一个整数, 一共占据4个字符的空间大小, 左对齐;
* %4d: 占位置, 会输出一个整数, 一共占据4个字符的空间大小, 左对齐;
*/
}
println()
}
}
}
运行结果如图所示:
鸡的数量问题
当我需要求出一些未知的数量时,可以敲击以下代码:
object base29 {
def main(args: Array[String]): Unit = {
// 百鸡百钱
/**
* 设公鸡 x,鸡母 y 只,小鸡是 100-x-y。
* 同时 0 <= x <= 20,0 <= y <= 33
*
* 5x + 3y + (100 - x - y) / 3 = 100 (1)
*
*
* 暴力求解
* 1.(0,0,100) 代入(2)看看是否成立?
* 2.(0,1,99) 代入(2)看看是否成立?
* 3.(33,33,37) 代入(2)看看是否成立?
*/
var k = 0
for (x <- 0 to 20) {
for (y <- 0 to 33) {
val z = 100 - x - y
// 代入 (1)
if (5 * x + 3 * y + z / 3 == 100) {
k += 1
println(x, y, z)
}
}
}
}
}
可以直接看出结果如图所示,问题在代码上面: