Java基本程序结构(基础2)

一、基本顺序、选择、循环结构

Java是最经典的面向对象语言,而软件工程又分为结构化设计和面向对象设计。软件工程的详细设计章节叙述了各种和代码有关的描述图,我在这里将软件工程中的各种图的画法和顺序、选择、循环结构代码结合到一起叙述,对学习软件工程的同学也有帮助。注意,在软件工程中,程序的三种基本结构是顺序、选择、循环,而数据的三种基本结构为顺序、选择、重复、(可选)。

顺序结构的程序语句只能被执行一次。

如果您想要同样的操作执行多次,就需要使用循环结构。

Java中主要的循环结构: 

  • while 循环
  • do…while 循环
  • for 循环
  • do…until 循环

 这些循环结构的具体使用就不需要写出来了,基本上就是常识:

//while
while( 布尔表达式 ) {
  //循环内容
}


//do...while
do {
  //循环内容
}while(布尔表达式);


//for循环
for(初始化; 布尔表达式; 更新) {
   //循环内容
}


//do...until
do{
  //循环内容
}until(布尔表达式);


//另外,Java5 引入了一种主要用于数组的增强型 for 循环。
for(声明语句 : 表达式)
{
   //代码句子
}
-------------------------------------------------------------------------
//数组for循环实例:x为一个自定义参数变量,numbers为数组,循环输出数组中的赋值。
public class Test {
   public static void main(String[] args){
      int [] numbers = {10, 20, 30, 40, 50};
 
      for(int x : numbers ){
         System.out.print( x );
         System.out.print(",");
      }
      System.out.print("\n");
      String [] names ={"James", "Larry", "Tom", "Lacy"};
      for(String name : names ) {
         System.out.print( name );
         System.out.print(",");
      }
   }
}
/**
10,20,30,40,50,
James,Larry,Tom,Lacy,
*/
-----------------------------------------------------------------------
/**
break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。

break 跳出最里层的循环,并且继续执行该循环下面的语句(这一次循环不经过)。

continue 适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。

在 for 循环中,continue 语句使程序立即跳转到更新语句(这一次循环不经过)。

在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句。
*/
break;
continue;

Java中主要的选择(条件)结构: 

  • if...else结构
  • switch结构
    1、switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
    2、当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
    3、如果 case 语句块中没有 break 语句时,匹配成功后,从当前 case 开始,后续所有 case 的值都会输出。
    4、当遇到 continue 语句时,switch 语句继续执行,在default终止。
    5、switch 语句一般包含一个 default 分支,在没有 case 语句的值和变量值相等的时候执行,该分支一般是 switch 语句的最后一个分支。default 分支不需要 break 语句。
     
//if条件
if(布尔表达式1)
{
   //如果布尔表达式1为true将执行的语句
}else if(布尔表达式2){
   //这次布尔表达式2为ture将执行的语句
}else {
  //以上均false将执行的语句
}



//if...else可嵌套
if(布尔表达式 1){
   //如果布尔表达式1的值为true执行代码
   if(布尔表达式 2){
     *** //如果布尔表达式2的值为true执行代码
   }
}//以上表达式1和2均成立才可以执行***,否则在第一个判断结束,相当于&&操作



//Switch选择

switch(expression){  //判断expression和value的值
    case value :
       //语句
       break; //可选
    case value :
       //语句
       break; //可选
    //你可以有任意数量的case语句
    default : //可选
       //语句
}

二、软件工程(详细设计章节图形)

 2.1 程序流程图

程序流程图又称为程序框图,它是历史最悠久、使用最广泛的描述过程设计的方法 ,对于控制流程的描绘很直观,但是无法保证非结构化程序不被表示出来,程序流程图不易表示数据结构。

 结构程序设计的经典定义:“如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。”后来又简化为仅有一个入口和一个出口。结构程序设计的定义处在不断地变化和更新之中。

2.2 N-S图/盒图

 能被盒图表示出来且正常结束的程序必是结构化程序。功能域明确,不可能任意转移控制,很容易确定局部和全程数据的作用域,很容易表示嵌套关系和模块层次结构。

2.3 PAD图/问题分析图

能被PAD 图表示出来且正常结束的程序必是结构化程序。支持自顶向下,逐步求精,即可表示程序逻辑,也可用于描绘数据结构。易将PAD图转换成高级语言源程序,如今可以用软件工具自动完成。

最后通过一段代码将这些图像串联起来:

通过二分查找法方法找到数组中的和key对应的元素下标并返回。

public static void search(int key, int[]elemArray,Result r){
  int bottom=0;
  int top=elemArray.length-1;
  int mid;
  r.found=false;
  r.index=-1;
  while(bottom<=top){
   mid=(mid+bottom)/2;
   if(elemArray[mid]==key){
     r.index=mid;
     r.found=true;
     return;
}else {
   if(elemArray[mid]<key){
     bottom=mid+1;}
     else {
      top=mid-1;
}
}
}
}

程序流程图:

盒图 :

PAD图:

 这里可以看到,在盒图和pad图中均有return可以跳出循环语句,违背了单入口单出口原则,所以此程序并不是结构化的,上面已经说过,只有能画出正常结束图的程序才能叫做结构化程序。

另外,对于for循环,在盒图中一般当做while循环来写。在pad图中思路相同,需记得 for循环中的“更新”应该在下一段图的最后写上。

参考资料:菜鸟教程 - 学的不仅是技术,更是梦想!

参考文献:《软件工程导论(第六版)》——张海藩、牟永敏

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S0fM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值