`
metaphy
  • 浏览: 345535 次
  • 性别: Icon_minigender_1
  • 来自: 大西洋底
社区版块
存档分类
最新评论

Java循环内goto语句的替代方案

阅读更多
众所周知,Java虚拟机根本没有实现goto关键字。我的一个函数需要这样的算法,在一个循环里,如果某一次循环不满足条件,那么整个循环需要重新开始。比如下面的例子,我想连续3次打印出随机数是0的情况。

	private void incorrectGotoSample() {
		int printNum = 3;
		Random r = new Random();
		int ri = r.nextInt(2);

		LABEL: for (int i = 0; i < printNum ; i++) {
			ri = r.nextInt(2);
			System.out.println("ri = " + ri);

			if (ri > 0) {
				goto LABEL; // "goto" not realized in Java
			}
			System.out.println("you are here!");
		}
	}

考虑了半天,Java里还是能简单实现这样的想法的。替换方案如下,在外层加一个无限循环,使用break跳出不满足情况时的循环状态,并再次使用break跳出无限循环:
private void gotoSample() {
		int printNum = 3;
		Random r = new Random();
		int ri = r.nextInt(2);

		while (true) {
			int i = 0;
			for (i = 0; i < printNum ; i++) {
				ri = r.nextInt(2);
				System.out.println("ri = " + ri);

				if (ri >= 1) {
					break;
				}

				System.out.println("you are here!");
			}
			if (i == printNum) {
				break;
			}
		}
	}


程序的某次执行结果如下,显示其满足我们的需要。
ri = 1
ri = 1
ri = 1
ri = 0
you are here!
ri = 1
ri = 1
ri = 1
ri = 1
ri = 0
you are here!
ri = 0
you are here!
ri = 1
ri = 0
you are here!
ri = 0
you are here!
ri = 0
you are here!
1
2
分享到:
评论
2 楼 metaphy 2012-08-14  
continue label 和break label 都没法简单的实现
1 楼 somefuture 2012-08-14  
break也可以用标签。用continue lable1。

相关推荐

    Java面试宝典2018版

    Java语言中不存在goto语句,尽管它是Java保留的关键词之一。在Java中,goto从未实现,也没有相应的替代机制,因此在编程中不能使用goto。 3. Java中逻辑运算符&与&&的使用及区别: &和&&都可以作为逻辑与运算符,...

    古典密码 替代 置换密码

    例如,我们需要使用大写的常量来声明变量,避免使用 goto 语句,使用明确的变量名来避免混淆。在编写代码时,我们需要认真检查代码,避免出现错误。 在本次实验中,我们学习了古典密码的基本概念和算法,并使用 C ...

    完整版 Java编程基础入门教程 Java语言程序设计 第2章_语言基础(共45页).ppt

    - **不支持goto语句**:Java使用异常处理(try-catch-finally)替代了goto语句,使代码更整洁且易于理解。 - **没有指针**:Java采用引用来间接操作对象,避免了指针可能导致的安全问题。 - **自动内存管理**:Java...

    Java面试宝典.pdf

    至于`goto`关键字,Java中并不支持,而是采用更加结构化的控制流语句如`break`和`continue`来替代。`&`和`&&`在逻辑运算中有所不同,`&`始终会计算两边的操作数,而`&&`则遵循短路逻辑,如果前一个操作数已确定结果...

    JAVA初中级面试题文档

    4. 跳出多重循环,可以通过在外层循环前定义标号并结合`break`语句实现,或者通过改变循环条件表达式来达到目的。通常推荐使用后者,因为它更清晰,避免了过多的标号和控制结构。 5. `switch`语句在Java中不能用于`...

    Java就业面试题大全

    Java提倡使用结构化编程,鼓励使用循环和分支语句替代`goto`。 3. **`&`与`&&`的区别**: - `&`和`&&`都是逻辑与运算符,但`&&`具有短路特性。如果左操作数为`false`,`&&`不会评估右操作数,而`&`总是会评估两边...

    2013java面试宝典

    Java提倡使用结构化的控制流,如`break`和`continue`来替代`goto`。 3. `&`和`&&`的主要区别在于逻辑运算的短路特性。`&`始终会计算两边的操作数,而`&&`只有当左边操作数为真时才会计算右边的操作数。在条件判断中...

    Java复习题

    表达式1:表达式2`可以用`if-else`语句替代。 循环结构是Java程序设计的基础,`for`、`while`和`do-while`各有特点。`for`循环通常用于已知循环次数的情况,`while`和`do-while`则适用于循环次数不确定的情况,其中`...

    java面试面霸

    4. **跳出多层循环**:在Java中,使用`break`语句可以跳出一层循环,`return`则可以结束整个方法并返回值,`continue`语句则跳过当前循环的剩余部分,进入下一次迭代。 5. **switch语句的适用范围**:switch语句...

    java面试宝典

    控制循环条件:通过修改外层循环的条件,使内层循环能够影响外层循环的执行情况。 - **注意事项**: - 使用标签时,确保标签名正确无误。 - 修改循环条件时,要保证逻辑清晰,避免复杂的条件判断导致的错误。 ...

    java面试题选

    3. **Java中的goto**:Java语言中不支持goto语句,它是一种被摒弃的控制流语句,通常被更高级的结构如break、continue和return替代。 4. **&和&&的区别**:&是位运算符,用于按位与操作;而&&是逻辑运算符,只有当...

    Java面试宝典2010版

    为了替代`goto`的功能,Java提供了`break`和`continue`语句来控制循环和其他流程结构。 ##### 3、说说&和&&的区别。 - **答案**: - `&`是位运算符,同时也是逻辑运算符。用于按位与操作,也可以用于逻辑与操作,...

    java最全的面试宝典

    1. **Java是否有goto语句**:Java语言最初设计时包含`goto`语句,但最终并未将其纳入标准语言特性。尽管如此,在JDK 1.4中引入了`break`和`continue`的标签化形式,这可以作为一种替代方案。 2. **& 和 && 的区别**...

    java基础面试题

    - **替代方法**: 可以通过修改外部循环的条件来控制循环的退出。例如,在查找数组元素时,可以通过设置标志变量来控制循环。 ### 5. `switch`语句的作用范围 - **知识点**: `switch`语句可以作用于`byte`、`short`...

    Java面试宝典2012版

    Java中没有传统的`goto`语句,这主要是为了提高代码的可读性和结构化,避免混乱的控制流。尽管如此,Java提供了类似的功能,如`break`和`continue`,用于控制循环和switch语句的流程。 3. **`&`和`&&`的区别** `&...

    java葵花宝典

    - **替代方案**: - 使用`break`或`continue`控制循环。 - 使用标记化的`break`来模拟`goto`的功能。 #### 3. `&` 和 `&&` 的区别 - **`&`**:按位与运算符;用作逻辑与运算符时,两边表达式都会被求值。 - **`&&...

    Java面试宝典

    - **替代方案**:虽然Java不支持传统的`goto`语句,但可以通过其他方式实现类似功能,比如使用标签化的`break`或`continue`语句。 **3. `&`与`&&`的区别** - **共同点**:两者都可用作逻辑与运算符,表示`AND`操作...

    java基础知识

    对于循环控制和其他跳转逻辑,Java提供了更安全且易于理解的替代方法,如`break`和`continue`等语句。 #### 三、逻辑运算符的使用与区别 **知识点5:逻辑运算符的差异** Java中有两个逻辑与运算符:`&&` 和 `&`。...

Global site tag (gtag.js) - Google Analytics