Java学习笔记27. 循环的嵌套与应用(以99乘法表为例)

可以说,使用循环就要使用嵌套,这种机制就像拳击里的组合拳一样。只有把嵌套用起来,循环才能发挥它真正的作用和力量。

循环嵌套的组合方式,可以由while循环,do while循环和for循环混合嵌套使用。其中,for循环的嵌套是最常用,最具有可读性的循环嵌套。

比如说,我们要打印一个99乘法表,就必须使用嵌套循环:

乘法表由乘数与被除数组成,乘数是数字1到9,被乘数也是数字1到9。所以需要用到两个循环变量,row 和 colume。

row代表行,取值从1到9; colume代表列,取值也是从1到9;

乘数与被乘数相乘,就会得出一个9行9列的矩阵,具体程序如下:

public class demo9x9{
	public static void main(String[] args){
		for(int row=1;row<=9;row++){  //控制打印的行数
			for(int column=1;column<=9;column++){  
				System.out.print(row+"x"+column+"="+row*column+"\t"); //打印输出每一行,并用制表符控制上下对齐
			}
			System.out.println();每输出完一行之后进行换行
		}
	}
}

编译执行,结果如下:


细看一下以上的输出结果,有一部分输出是多余的,比如1x2和2x1,其实是一样的,保留一个就可以了。

我们只需要保留上半个,或者下半个三角形的输出就可以了。

具体怎么做呢,需要对程序进行优化:

仔细观察,对于乘法表的第二行,只需要输出后8列就可以了。对于第三行,只需要输出后7列就可以了,依次类推。

在减少输出项的同时,还要注意上下对齐,以使乘法表显得整齐有序。

public class demo9x9{
	public static void main(String[] args){
		for(int row=1;row<=9;row++){  //外层循环,控制输出的行数
			if(row>1){  //内层循环的第一部分,控制每行输出的tab制表符:第1行0个,第2行1个,第3行2个
				for(int t=1;t<row;t++){
					System.out.print("\t");
				}
			}
			for(int column=row;column<=9;column++){ //内层循环的第二部分,控制每行输出的乘法表的项目
				System.out.print(row+"x"+column+"="+row*column+"\t");
			}
			System.out.println();
		}
	}
}

编译执行,结果如下:

这样一来,99乘法表就比较清晰了。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当你提交Spark Core源码学习笔记的时候,并注册Driver的流程,以Java的WordCount为例。 首先,编写提交Job的代码: ```java import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; public class WordCount { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("WordCount"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDD<String> lines = sc.textFile(args[0]); JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator()); JavaPairRDD<String, Integer> pairs = words.mapToPair(word -> new Tuple2<>(word, 1)); JavaPairRDD<String, Integer> counts = pairs.reduceByKey((a, b) -> a + b); counts.saveAsTextFile(args[1]); } } ``` 之后就是提交任务和注册Driver: ```java import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.SparkContext; public class WordCount { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("WordCount"); JavaSparkContext sc = new JavaSparkContext(conf); SparkContext spark = SparkContext.getOrCreate(conf); spark.addSparkListener(new MySparkListener()); JavaRDD<String> lines = sc.textFile(args[0]); JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator()); JavaPairRDD<String, Integer> pairs = words.mapToPair(word -> new Tuple2<>(word, 1)); JavaPairRDD<String, Integer> counts = pairs.reduceByKey((a, b) -> a + b); counts.saveAsTextFile(args[1]); } } class MySparkListener extends SparkListener { public void onApplicationStart(SparkListenerApplicationStart applicationStart) { String appName = applicationStart.appName(); System.out.println("Application started: " + appName); } public void onApplicationEnd(SparkListenerApplicationEnd applicationEnd) { long time = applicationEnd.time(); System.out.println("Application ended: " + time); } } ``` 这个代码会在提交任务的时候,自动注册Driver,并且添加了自定义的Listener。注意,在提交任务前,需要先启动Spark集群,并将提交路径和结果路径传递给代码的args数组。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值