[英]Equivalent of goto of c++ in Java in a specific scenario
我正在用 Java 替換舊的 C++ 代碼:我知道 java 中沒有與 goto 等效的代碼,因為它會導致許多令人驚訝的錯誤和意外的循環終止。
C++ 代碼://我已經跳過了實際代碼
for(//some condition){
if (excl(grds[i],0))
{
//do something
goto breakout;
}
//some more code
breakout:
//rest of the code
}//end of for loop
Java表示:
for(//some condition){
if (excl(grds[i],0))
{
//do something
}
else
{
//some more code
}
//rest of the code
}//end of for loop
我在 else 部分保留了“更多代碼”部分,所以我猜它會 function 與突破相同。 當 if 條件為真時,它不會 go 到 else 部分,代碼的 rest 將照常執行。 我猜 break 或 continue 不會達到目的,因為我們需要以任何方式運行代碼部分的 rest 以進行所有迭代。
這是在 Java 中表示此 C++ 代碼的正確方法嗎?
是的,這將是更好的方法 - 在 Java 和 C++ 中。
for(//some condition){
if (!(excl(grds[i],0)))
{
//some more code
}
//rest of the code
}//end of for loop
編輯:在你澄清之后,你做的方式很好。
為什么你不能擁有這樣的東西?
在您的 C++ 代碼中, //some more code
僅在條件為 false 時執行,並且//rest
始終執行。 所以把它放在if中。
這可能是最簡單的方法:
for(//some condition){
if(!excl(grds[i],0))
{
//some more code
}
//rest of the code
}//end of for loop
你真的不應該在 C++ 中使用goto
。 附帶說明一下,在 Java 中,您可以擁有可用於模擬goto
的命名塊:
namedBlock:
{
// some code
if(condition)
break namedBlock;
// some more code
}
// rest of the code
但這是一種糟糕的做法。 不要這樣做。 忘了我什至提到過它;)
是的。
更准確地說,這就是正確的在 C++ 中表示該代碼的最佳方式也是如此。 為什么使用goto
而不是簡單的if
?
這是一個黑客
for(//some condition){
do { // note this *do*
if (excl(grds[i],0))
{
break; // out of do/while
}
//some more code
}
while(false); // do only once
//rest of the code
}//end of for loop
我敢肯定人們會因此而討厭我,但與 if/else 示例相比,您可以更接近 Java 中的goto
語句。 例如,您可以這樣做:
for(/*some condition*/){
breakout: {
if (excl(grds[i],0)) {
break breakout; //this will jump to the end of the "breakout" block
}
//some more code
}
//rest of the code
}
當然,這不是一個好的 Java 編碼風格的例子,僅僅因為可以這樣做並不意味着應該這樣做。 真的,您應該堅持使用 if/else。
在某些情況下,非常罕見的情況下,使用goto
正是 C++ 中的正確選擇。 所示示例不是其中之一。 這是一個不應該被使用的goto
,期間。 如果您可以在不增加變量、不增加復雜性的情況下消除goto
,則goto
存在的理由為零。
C++ 中goto
的一些有效用法可以在 Java 中輕松消除。
goto
的目標緊接在某個右大括號之前時,將goto label
更改為 continue continue label
。 當goto
的目標緊跟在某個右大括號之后時,將goto label
更改為break label
。 (label 語句可能需要移動。)goto
代替throw
來進行本地錯誤處理/本地錯誤恢復。 C++ 異常具有相當嚴重的性能損失。 如果代碼正在轉換為 Java 很明顯性能不是問題。 對這種 goto 使用goto
異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.