java_if分支

1 、if语句

    if关键字中文意思是如果,其细致的语法归纳来说总共有三种:if语句、if-else语句和if-else if-else语句,下面分别进行介绍。

该类语句的语法格式为:if(条件表达式)

    功能代码;语法说明:if是该语句中的关键字,后续紧跟一对小括号,该对小括号任何时候不能省略,小括号的内部是具体的条件,语法上要求该表达式结果为boolean类型。后续为功能的代码,也就是当条件成立时执行的代码,在程序书写时,一般为了直观的表达包含关系,功能代码一般需要缩进。

    需要特别注意的是:

    1、 这里的功能代码只能是一行,关于多行结构的功能代码,后续将说明。

    2、 if(条件表达式)后续一般不书写分号if语句的执行流程为:如果条件表达式成立,则执行功能代码,如果条件表达式不成立,则不执行后续的功能代码。

    示例代码:

    int a = 10;

    if(a >= 0)

    System.out.println(“a是正数”);

    if( a % 2 == 0)

    System.out.println(“a是偶数”);

    在该示例代码中,第一个条件是判断变量a的值是否大于等于零,如果该条件成立则执行输出,第二个条件是判断变量a是否为偶数,如果成立也输出。

    注意以下代码的执行流程:

    int m = 20;

    if( m > 20)

    m += 20;

    System.out.println(m);

    按照前面的语法格式说明,只有m+=20;这行代码属于功能代码,而后续的输出语句和前面的条件形成顺序结构,所以该程序执行以后输出的结果为20.如果当条件成立时,需要执行的语句有多句,则可以使用语句块来进行表述,语法格式如下:

    if(条件表达式){

    功能代码块;

    }

    使用这种语法格式,使用一个代码块来代替前面的功能代码,这样可以在代码块内部书写任意多行的代码,而且也使整个程序的逻辑比较清楚,所以在实际的代码编写中推荐使用该种逻辑。

 

1.2 if-else语句

    if-else语句实现了封闭的条件,在程序中使用的更加常见。其中else关键字的作用是“否则”,即条件不成立的情况。

    if-else语句的语法格式如下:

    if(条件表达式)

    功能代码1;

    else

    功能代码2;

    语法说明:其中前面的部分和if语句一样,else部分后面是功能的代码,按照该语法格式,功能代码只能有一句。

    执行顺序:如果条件成立,则执行if语句中的功能代码1,否则执行else中的功能代码2.示例代码为:

    int n = 12;

    if(n % 2 != 0)

    System.out.println(“n是奇数”);

    else System.out.println(“n不是奇数”);

    则因为n%2的值是0,条件不成立,则执行else语句的代码,程序输出“n不是奇数”。

    在实际使用时,为了结构清楚,以及可以在功能代码部分书写多行代码,一般把功能代码部分使用代码块,则语法格式为:

    if(条件表达式){

    功能代码块

    }else{

    功能代码块

    }

    当程序中有多个if时,else语句和最近的if匹配。示例代码:

    if(条件1)

    功能代码1;

    if(条件2)

    功能代码2;

    else功能代码3;

    则这里的else语句和条件2对应的if语句匹配,前面的条件1是一个独立的语句。在实际代码中,可以使用大括号使整个程序的结构更加清楚。

    对于if-else语句来说,因为if的条件和else的条件是互斥的,所以在实际执行中,只有一个语句中的功能代码会得到执行。

    在实际开发中,有些公司在书写条件时,即使else语句中不书写代码,也要求必须书写else,这样可以让条件封闭。这个不是语法上必须的。

 

 

1.3 if-else

    if-else语句在现实中,有些时候的条件不是一个,而是一组相关的条件,例如将阿拉伯数字转换为中文大写,根据分数转换为对应的等级等,都是多条件的结构,在程序中为了避免写多个if语句的结构,提供了一类专门的多分支语句,这就是if-else if-else语句。

    if-else if-else语句的语法格式为:

    if(条件1)

    功能代码1;

    else if(条件2)

    功能代码2;

    else if(条件3)

    功能代码3;

    ……

    else功能代码;

    语法说明:

    1、 else if是else和if两个关键字,中间使用空格进行间隔。

    2、 条件1到条件n都是boolean类型

    3、 else if语句可以有任意多句

    4、 最后的else语句为可选

    5、 如果功能代码部分不是语句块,也就是不用大括号,就只能写一句。

    执行流程:当条件1成立时,则执行功能代码1;当条件1不成立且条件2成立时,则执行功能代码2;如果条件1、条件2都不成立且条件3成立,则执行功能代码3,依次类推,如果所有条件都不成立,则执行else语句的功能代码。

***:下面是小编自己做的练习题:判断年份是闰年还是平年??

提示1:能被4整除,但不能被100整除的年份是闰年     提示2:能被400整除的年份是闰年

public static void main(String[] args) {
int year = 您想输入的年份比如:1997;
if(year%4==0 && year%100!=0 || year%400==0){
System.out.println("你输入的年份是闰年!!");
}else{
System.out.println("你输入的年份是平年!!");
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分支限界法可以用来解决单源最短路径问题。在分支限界法,我们维护一个有序的候选节点集合,每次选择其代价最小的节点进行扩展。如果扩展的节点到达了目标节点,就可以返回最短路径。 在单源最短路径问题,我们需要找到从源节点到目标节点的最短路径。我们可以使用 Dijkstra 算法或 Bellman-Ford 算法来解决这个问题。这里我们使用 Dijkstra 算法作为例子来说明如何使用分支限界法来解决单源最短路径问题。 Dijkstra 算法的基本思路是:从源节点开始,每次选择代价最小的节点进行扩展,直到到达目标节点或者无法继续扩展为止。我们可以使用一个优先队列来维护候选节点集合,优先队列按照节点的代价排序,每次选择队列代价最小的节点进行扩展。 在分支限界法,我们需要维护一个活结点集合和一个优先队列。活结点集合存储的是还没有被扩展的节点,优先队列存储的是已经被扩展的节点。每次从优先队列选择代价最小的节点进行扩展,并将生成的子节点加入活结点集合。 具体的算法流程如下: 1. 初始化活结点集合和优先队列。活结点集合只包含源节点,优先队列为空。 2. 从优先队列取出代价最小的节点进行扩展。 3. 对于每个生成的子节点,如果已经扩展过了,则丢弃;如果是目标节点,则返回最短路径;否则将子节点加入活结点集合和优先队列。 4. 重复步骤2-3,直到到达目标节点或者无法继续扩展为止。 下面是使用分支限界法和 Dijkstra 算法来解决单源最短路径问题的 Java 代码示例: ```java import java.util.*; class Node { int id; int cost; public Node(int id, int cost) { this.id = id; this.cost = cost; } } public class ShortestPath { public static List<Node>[] graph; public static int[] dist; public static boolean[] visited; public static void main(String[] args) { // 构造图,这里使用邻接表表示图 int n = 5; graph = new ArrayList[n]; for (int i = 0; i < n; i++) { graph[i] = new ArrayList<>(); } graph[0].add(new Node(1, 1)); graph[0].add(new Node(2, 4)); graph[1].add(new Node(2, 2)); graph[1].add(new Node(3, 5)); graph[2].add(new Node(3, 1)); graph[2].add(new Node(4, 3)); graph[3].add(new Node(4, 1)); // 求解最短路径 int source = 0, target = 4; int shortestCost = dijkstra(source, target); // 输出结果 if (shortestCost < Integer.MAX_VALUE) { System.out.println("The shortest path from " + source + " to " + target + " is " + shortestCost); } else { System.out.println("There is no path from " + source + " to " + target); } } public static int dijkstra(int source, int target) { // 初始化 int n = graph.length; dist = new int[n]; visited = new boolean[n]; Arrays.fill(dist, Integer.MAX_VALUE); dist[source] = 0; PriorityQueue<Node> pq = new PriorityQueue<>((a, b) -> a.cost - b.cost); pq.offer(new Node(source, 0)); // 分支限界法,使用 Dijkstra 算法求解最短路径 while (!pq.isEmpty()) { Node node = pq.poll(); int id = node.id; if (visited[id]) { continue; } visited[id] = true; for (Node neighbor : graph[id]) { int nextId = neighbor.id; int nextCost = neighbor.cost; if (visited[nextId]) { continue; } int newDist = dist[id] + nextCost; if (newDist < dist[nextId]) { dist[nextId] = newDist; pq.offer(new Node(nextId, newDist)); } } if (id == target) { break; } } return dist[target]; } } ``` 这段代码,我们使用了一个邻接表来表示图,使用了 Dijkstra 算法来求解最短路径,同时使用了分支限界法来优化算法效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值