簡體   English   中英

如何避免Java中的無限循環

[英]How can I avoid infinite loop in Java

我該如何重新編寫此代碼,以便不使用while(true)循環? 我需要打破while循環條件的方法,但似乎無法解決。

ArrayList<Account> accounts = new ArrayList<Account>();

public void enterCustomers()
{
   System.out.println("Enter customer names or q to quit entering names");

   while(true)
    {
        Scanner scan = new Scanner(System.in);                          //find alternative to while true

        System.out.print("Enter a customer name: ");
        String name = scan.nextLine();

        if(name.equalsIgnoreCase("q"))
        {
            break;
        }

        System.out.print("Enter openning balance: ");
        Double balance = scan.nextDouble();

        Account a = new Account(name, balance);
        accounts.add(a);}
}

因此,如果要刪除while(true)循環,可以使用以下代碼:

String name = scan.nextLine();
while(!name.equalsIgnoreCase("q")){
  //do stuff here
  name = scan.nextLine();
}

或者更好的方法是使用do while循環(避免重復的名稱分配),因為do while將在進入循環后檢查條件:

String name;
do{
  name = scan.nextLine();
  //do stuff here
}while(!name.equalsIgnoreCase("q"));

我認為解決此問題的最簡單方法是將while循環的條件設置為與if條件相反的條件,如下所示:

ArrayList<Account> accounts = new ArrayList<Account>();

public void enterCustomers()
{
   Scanner scan = new Scanner(System.in);
   System.out.println("Enter customer names or q to quit entering names");
   System.out.println("Enter a customer name:");
   Stirng name = scan.nextLine();

   while(!name.equalsIgnoreCase("q"))
    {     
        System.out.print("Enter openning balance: ");
        Double balance = scan.nextDouble();

        Account a = new Account(name, balance);
        accounts.add(a);            

        System.out.print("Enter a customer name: ");
        name = scan.nextLine();
    }
}

首先要知道scan.nextDouble()正在讀取數字,而不是折線,您必須添加一個虛擬scan.nextLine()或類似的東西,以讀取數字后的折線。

我總是喜歡讓方法做一件事情,例如askForData(Scanner scan),所以看起來像這樣:

import java.util.Scanner;

public class SomeTest {

public static void main(String[] args) {
    System.out.println("Enter customer names or q to quit entering names");
    Scanner scan = new Scanner(System.in);
    String name="notExit"; //some name that is not exiting
    while(!name.equalsIgnoreCase("q")){
        name = askForData(scan);
    }
}

private static String askForData(Scanner scan) {
    System.out.print("Enter a customer name: ");
    String name = scan.nextLine();
    if (!name.equalsIgnoreCase("q")) {
        System.out.print("Enter openning balance: ");
        Double balance = scan.nextDouble();
        scan.nextLine(); //to read the break line
    }
    return name;
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM