java如何循環調用方法_Java:調用方法的“中斷”循環?

我的小程序有點問題。

我有一個JOptionPane要求一個數字,如果該數字小于10,則一個循環會一直持續下去,并永遠做下去,繼續詢問數字。 在該循環內,我調用一個方法,將int作為參數。 在該方法中,我需要(不更改調用該方法的類中的任何代碼)找出我輸入的數字是否小于1。如果是,則需要調用另一個方法。 到此為止。

但! mainloop不斷滾動,因此它繼續執行循環中的其他工作。 我需要阻止它執行此操作,因此在方法的if語句中,我需要中斷該方法所在的循環的特定迭代,并使其繼續執行同一循環的新迭代,并要求 新號碼。

第一類(示例):

number=Integer.parseInt( JOptionPane.showInputDialog("bla bla" ) );

while (number !=- 10) {

themethod(number);

blah

blah

...

}

調用的方法(示例):

public void themethod(int number) {

if (number<1) {

call the other method

break the iteration im in

}

只需返回一些錯誤代碼,并在返回該代碼時中斷循環即可。

您想打破哪個循環? 方法內部是否還有另一個循環?

不更改while循環中的代碼是不可能的。 哪個部分屬于哪個班級,您不能更改哪個班級?

您可以在這里做很多事情。最終,您應該做什么取決于您的編碼風格和您要完成的工作。

選項1是以下內容的一些變體:

for (;;)

{

int number = /* ... */;

myMethod(number);

if (number == -10)

break;

}

您可能會主觀地(取決于情況)說這是不好的,因為在循環中包含了終止條件的知識,而不是進行"實際工作"的方法。也許你的循環沒關系。也許在其他情況下(或與其他程序員一起使用?這在很大程度上取決于個人喜好。)您可能想使myMethod做出該決定。通常,我自己的個人喜好通常傾向于不將場景知識分配到源頭上的各種方法中。

因此,我從這里開始寫的大部分內容將是如何使myMethod決定是否終止。

選項2-myMethod返回一個布爾值,指示我們應該終止:

for (;;)

{

int number = /* ... */;

if (myMethod(number))

break;

}

boolean myMethod(int number)

{

// TODO - do stuff

return number == -10;

}

但是您可能會說myMethod已經想返回其他類型。我非常有C背景,所以我最常使用的慣用法就是" out參數"。引導我進入選項3:

選項3-Out參數讓呼叫者決定終止:

public class CancelIndicator

{

public boolean shouldCancel;

};

CancelIndicator cancel = new CancelIndicator();

while (!cancel.shouldCancel)

{

int number = /* ... */;

myMethod(number, cancel);

}

int myMethod(int number, CancelIndicator cancel)

{

// TODO - do stuff.

cancel.shouldCancel = (number == -10);

return /* ... */;

}

或者,也許您更喜歡例外:

選項3:

public class CancellationException extends Exception

{

}

try

{

for (;;)

{

int number = /* ... */;

myMethod(numberl);

}

}

catch (CancellationException ex)

{

}

void myMethod(int number) throws CancellationException

{

// TODO - do stuff.

if (number == -10)

throw new CancellationException();

}

如您所見,有很多選項。我敢肯定,人們可能會花一整天的時間討論不同的方法。這是我見過的慣用法示例-我會警告您,自從我在Java中做了大量工作以來已經有一段時間了,因此我可能不會在這里編寫最慣用的代碼。 :-)

我認為他不能修改循環的內容,但是只能修改方法。但是無論如何,答案都很好。 +1

謝謝!當我看到"拋出新事物"時,我知道該怎么做。

等待,這樣您就可以一直拋出異常?循環的其余部分是否有一些catch語句?

我似乎錯過了不允許您修改代碼的部分。如果您有一些講師告訴您這一點,我認為他們以非常愚蠢的方式進行教育。就像在說:將其釘牢,但不要使用錘子。

添加一個返回值,指示while應該中斷:

public boolean themethod(int number) {

if(number<1) {

call the other method

return true;

}

return false;

}

然后:

while(number !=-10) {

if(themethod(number)) break;

bla

bla

...

}

編輯:如果您無法更改while代碼,請從方法中引發異常:

public void themethod(int number) {

if(number<1) {

call the other method

throw new RuntimeException("Negative Number");

}

}

我不能更改循環所在類的代碼,也不能更改方法的類型:(

@ user1092483:那你能改變什么?

等等,我明白了嗎?您有一個循環,要求輸入一個數字,如果數字不是-10,會執行某些操作,否則會中斷?

如果是這樣,請查看以下內容:

while(true) {

number=Integer.parseInt( JOptionPane.showInputDialog("bla bla" ) );

if(number == -10) {

break;

}

themethod(number);

}

否則,如果不是這種情況,并且您想在兩種情況(-10號情況和方法為錯誤的情況)下進行折斷,則可以執行以下操作:

更改您的方法以返回布爾值。如果它是真的,那么它就不想破壞。如果它為假,則它想中斷,然后執行以下操作:

while(true) {

number=Integer.parseInt( JOptionPane.showInputDialog("bla bla" ) );

if(number == -10) {

break;

}

if(!themethod(number)) break;

}

如果您確實無法編輯循環,則只需從方法中拋出異常即可!但是,這將退出整個程序。但是,我看不到任何其他可能的方式。

等等,為什么您不能編輯課程?您可以編輯循環條件嗎?

嗯...然后只是調用一個異常。你在課堂上做什么。也許知道這會給我們一個提示,告訴他們他們期望您做什么。

我們有關于例外的討論,但是當我嘗試添加例外時,它仍然無法正常工作。問題是,當我輸入一個負數時,該方法之后的方法仍然會執行,并且如果我輸入一個負數,它們將失敗。

也許您可以發布所有代碼。我感覺這里還有更多我們看不到的東西。" bla"可以抓住答案的關鍵。

沒有themethod(int)的返回值并且沒有更改其他類的代碼,這是不可能的,因為就這樣,沒有返回通信。您必須同時更改兩者。如果不更改循環中的邏輯就無法做到這一點。

這樣就無法從while循環中進行受控中斷。你只能做System.exit(0);這會中斷整個程序或引發異常,并希望循環能夠處理它。也許發布您的完整代碼?另外,請在您的問題中添加"作業"標簽。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529846.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529846.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529846.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

隨機投點法計算定積分java_11 隨機模擬積分 | 統計計算

11.4 高維定積分上面的兩種計算一元函數定積分的方法可以很容易地推廣到多元函數定積分&#xff0c;或稱高維定積分。設\(d\)元函數\(h(x_1, x_2, \dots, x_d)\)定義于超矩形\[\begin{aligned}C \{(x_1, x_2, \ldots, x_d): a_i \leq x_i \leq b_i, i1,2,\ldots,d \}\end{alig…

java el ognl_EL和OGNL表達式的區分

OGNL是通常要結合Struts 2的標志一起使用&#xff0c;如 struts頁面中不能單獨使用&#xff0c;el可以單獨使用 ${sessionScope.username}頁面取值區別&#xff1a;名稱servletognl elparametersre…

java query包,有沒有Java的http_build_query函數的Java等價物?

I have a Map with my data and want to build a query string with it, just like I would with http_build_query on PHP. Im not sure if this code is the best implementation of it or if Im forgetting something?public String toQueryString(Map, ?> data) throw…

JAVA不同類型數組重載_java學習筆記--java中的方法與數組

方法完成特定功能的代碼塊方法的格式修飾符 返回值類型 方法名(參數類型 參數名1&#xff0c;參數類型 參數名2...){//方法體return 返回值&#xff1b;}方法的調用方式通過方法名調用方法根據形式參數列表將實際參數傳遞給方法定義方法的注意事項1.方法必須定義在類中2.方法與…

鏈表每k個反轉 java_K 個一組翻轉鏈表

leetcode第25題(困難)問題描述給你一個鏈表&#xff0c;每 k 個節點一組進行翻轉&#xff0c;請你返回翻轉后的鏈表。k 是一個正整數&#xff0c;它的值小于或等于鏈表的長度。如果節點總數不是 k 的整數倍&#xff0c;那么請將最后剩余的節點保持原有順序。示例&#xff1a;給…

java里面的scanner怎么關閉_作業。scanner怎么不能關閉

package try_catch; import java.util.Scanner; public class TryCatchPractice2 {//在類開始聲明,則其他方法都能調用 Scanner in=new Scanner(System.in); NoBookException NoB=new NoBookException(); String[] books={"語文","數學","英語"…

java ddd 領域事件_Cribbb基于DDD/Domain Event領域事件的開源PHP通知系統

Cribbb是一個使用DDD聚合根和領域事件Domain Events概念開發的PHP開源通知框架&#xff1a;cribbb/cribbb GitHub幾乎所有Web應用都有一個通知提醒系統&#xff0c;這些通知系統都有共有的屬性和功能&#xff1a;一個發往用戶的消息管道Cribbb通知系統扮演一種消息管道&#x…

java 自帶導出excel_4.java項目頁面導出excel功能

用的是SSM框架,字段根據自己的業務需求改1.前臺頁面導出/*導出按鈕提交*/function downloadExcel(){$("#dynamicDownload").submit();}2.后臺相關代碼import org.apache.poi.hssf.usermodel.HSSFCellStyle;import org.apache.poi.hssf.usermodel.HSSFFont;import org…

php 運行外部程序_PHP在linux上執行外部命令的方法

目錄&#xff1a;一、PHP中調用外部命令介紹二、關于安全問題三、關于超時問題四、關于PHP運行linux環境中命令出現的問題一、PHP中調用外部命令介紹在PHP中調用外部命令&#xff0c;可以用&#xff0c;1>調用專門函數、2>反引號、3>popen()函數打開進程&#xff0c;三…

php直播pk規則,直播源碼中的主播PK功能是如何實現的

直播行業為贏得更廣泛用戶的青睞&#xff0c;自然要不斷開發更有趣的玩法、模式&#xff0c;在直播源碼中加入主播PK功能就是一種提高直播互動性、激發用戶好勝心的方法&#xff0c;一方面這種方法可以吸引更多用戶觀看&#xff0c;增加主播的曝光率&#xff0c;另一方面它又能…

php中手機端ajax上拉加載更多,jQuery手機網頁上拉加載更多

手機網頁和PC網頁都可以使用的上拉加載更多內容&#xff0c;其中LoadingDataFn自己改為ajax加載就可以了var page 1, //分頁碼off_on false, //分頁開關(滾動加載方法 1 中用的)timers null; //定時器(滾動加載方法 2 中用的)//加載數據var LoadingDataFn function() {var …

phpcms上傳php,phpcms如何上傳視頻

phpcms如何上傳視頻&#xff1f;phpcms-v9上傳視頻文件時的解決方案1.不建議直接在后臺上傳視頻文件&#xff0c;因為視頻文件一般都比較大&#xff0c;直接上傳影響帶寬&#xff1b;可先通過ftp工具將視頻文件上傳到指定目錄&#xff0c;然后再后臺引入視頻文件的地址即可2.如…

護衛神怎么重啟php,護衛神·主機大師如何開啟php_opcache_護衛神

護衛神主機大師支持5.5至7.3這幾個版本開啟php_opcache擴展。一&#xff0c;先打開護衛神主機大師面板-常用操作-打開軟件目錄二&#xff0c;打開phpweb目錄&#xff0c;找到要開啟opcache的php版本&#xff0c;比如我這里要在php5.5中開啟&#xff0c;進入php55目錄&#xff0…

php 首頁加背景圖片,如何在頁首添加一張背景圖片

Navy主題如何在頁首添加一張圖片可以http://www.ikk.me/這樣子頂部添加背景圖片他的代碼是【點擊查看】回復內容&#xff1a;Navy主題如何在頁首添加一張圖片可以http://www.ikk.me/這樣子頂部添加背景圖片他的代碼是【點擊查看】看了下代碼&#xff0c;就是給 section 加了個 …

php裝箱,php兌現裝箱算法

php實現裝箱算法貪婪法是一種不追求最優解&#xff0c;只希望得到較為滿意解的方法。貪婪法一般可以快速得到滿意的解&#xff0c;因為它省去了為找最優解要窮盡所有可能而必須耗費的大量時間。貪婪法常以當前情況為基礎作最優選擇&#xff0c;而不考慮各種可能的整體情況&…

flash as3與后臺php交互用戶注冊例子,as3與PHP后臺交互2

怎么樣&#xff0c;是不是也很方便的實現了as3和后臺的數據傳輸&#xff1f;恩&#xff0c;現在我們的程序可以雙向交互數據了&#xff0c;但這只是一些簡單的數據&#xff0c;如果你要傳輸帶有結構的數據&#xff0c;(熟悉as2的人都知道loadVars可以自動解析下載數據的結構)&a…

java 去除 quot,JAVA去除web頁面傳入后臺的特殊字符工具類 | 學步園

package www.tmzskj.com.utils;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.junit.Test;/*** 功能 過濾特殊字符&#xff0c;清除掉所有特殊字符* regEx 為要清除的字符* author admin**/public class StringFilterTest {public static String …

matlab傅里葉工具箱,matlab通信工具箱.pdf

matlab通信工具箱randerr 產生隨機誤碼圖樣randint 產生均勻分布的隨機整數信號源 randsrc 用預定義的字母表產生隨機矩陣wgn 產生高斯噪聲commsrc.pattern 結構模式生成句柄berawgn 非編碼的AWGN 信道的誤比特率bercoding 編碼的AWGN 信道的誤比特率berconfint 蒙特卡羅仿真下…

java迭代器cas,java提高篇(三十)-Iterator - Java 技術驛站-Java 技術驛站

迭代對于我們搞Java的來說絕對不陌生。我們常常使用JDK提供的迭代接口進行Java集合的迭代。Iterator iterator list.iterator();while(iterator.hasNext()){String string iterator.next();//do something}迭代其實我們可以簡單地理解為遍歷&#xff0c;是一個標準化遍歷各類…

mysqldb mysql config,安裝mysqldb python界面時找不到mysql_config

mySQLdb是一個用于mysql的python界面&#xff0c;但它不是mysql本身。 顯然mySQLdb需要命令“mysql_config”&#xff0c;所以你需要先安裝。你能否確認你是否通過從shell運行“mysql”來安裝mysql本身&#xff1f; 這應該給你一個“mysql&#xff1a;command not found”以外的…