Как я могу избежать бесконечного цикла в Java - PullRequest
0 голосов
/ 11 сентября 2018

Как мне переписать это, чтобы я не использовал цикл 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);}
}

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

Я думаю, что самый простой способ подойти к этому - установить условие цикла 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();
    }
}
0 голосов
/ 11 сентября 2018

Прежде всего, обратите внимание на scan.nextDouble (), так как он читает число, но не точку разрыва, вам нужно будет добавить фиктивную scan.nextLine () или что-то подобное, чтобы читать строку разрыва после числа.

Я всегда предпочитаю иметь методы, выполняющие одну вещь, например askForData (сканирование сканера), поэтому это будет выглядеть так:

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;
}
}
0 голосов
/ 11 сентября 2018

Итак, если вы хотите удалить цикл 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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...