Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何避免Java中的无限循环_Java_While Loop - Fatal编程技术网

如何避免Java中的无限循环

如何避免Java中的无限循环,java,while-loop,Java,While Loop,我如何重新编写它,使我不使用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)

我如何重新编写它,使我不使用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);}
}
ArrayList accounts=new ArrayList();
公众客户()
{
System.out.println(“输入客户名称或q退出输入名称”);
while(true)
{
Scanner scan=new Scanner(System.in);//查找while true的替代项
System.out.print(“输入客户名称:”);
字符串名称=scan.nextLine();
if(名称、等效信号情况(“q”))
{
打破
}
系统输出打印(“输入打开余额:”);
双平衡=scan.nextDouble();
账户a=新账户(名称、余额);
账户。添加(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(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();
    }
}
ArrayList accounts=new ArrayList();
公众客户()
{
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入客户名称或q退出输入名称”);
System.out.println(“输入客户名称:”);
Stirng name=scan.nextLine();
而(!name.equalsIgnoreCase(“q”))
{     
系统输出打印(“输入打开余额:”);
双平衡=scan.nextDouble();
账户a=新账户(名称、余额);
增加(a);
System.out.print(“输入客户名称:”);
name=scan.nextLine();
}
}

我认为最简单的方法是将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();
    }
}
ArrayList accounts=new ArrayList();
公众客户()
{
扫描仪扫描=新扫描仪(System.in);
System.out.println(“输入客户名称或q退出输入名称”);
System.out.println(“输入客户名称:”);
Stirng name=scan.nextLine();
而(!name.equalsIgnoreCase(“q”))
{     
系统输出打印(“输入打开余额:”);
双平衡=scan.nextDouble();
账户a=新账户(名称、余额);
增加(a);
System.out.print(“输入客户名称:”);
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;
}
}

首先要注意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;
}
}

除了do/while示例外,如果用户输入“q”,则该示例将进行处理,因为“do stuff”是在检查开始之前完成的。如果该示例中的内容也将检查它是否为qe,则可以。如果用户输入“q”作为“do stuff”,则该do/while示例将进行处理是在检查开始之前完成的。如果那里的东西也会检查它是否为qHi,这是可以的。它几乎可以在第一个循环中工作,但在第二个循环中,它会在同一行上同时打印“输入期初余额”和“输入客户名称”。嗨,它几乎可以在第一个循环中工作,但在第二个循环中,它会打印“输入期初余额”和同时在同一行上“输入客户名称”。