循环错误的方式?

时间:2016-05-26 23:28:32

标签: java loops arraylist

我班级的作业要求我创建一个程序,告诉超市哪个顾客每天都在商店里花了最多的钱。该程序必须找到该客户并显示其名称。

作业目标 - 要处理多个班级,请使用ArrayLists并应用所获得的知识。

我的问题:

  1. 我应该如何在我的主类中循环我的两个输出语句?这是我的主要方法吗?我需要循环直到使用哨兵。
  2. 这对我的哨兵有什么影响?
  3. 在处理循环时,我应该问自己什么类型的问题?我想我想过这个部分。
  4. 我真的很想了解我在这里做了什么,所以在正确的方向上任何帮助都会受到赞赏!提前谢谢你抽出时间帮助我!

    import java.util.Scanner;
    
    public class main {
    
    public static void main(String[] args) {
    
        System.out.println("* * * * * THE SUPERMARKET * * * * *");
        System.out.println("       Written by Nate Irwin");
        System.out.println();
    
        double finalTotal = -1;
        String anAccountName;
    
        Scanner input = new Scanner(System.in);
        Store store = new Store();
    
        do {
            System.out.println("Enter the customer name: ");
            if(input.hasNextLine()){
                anAccountName = input.nextLine();
                System.out.println("Enter customer total price, hit 0 to QUIT: ");
                finalTotal = input.nextDouble();
                store.addAccount(anAccountName, finalTotal);
                System.out.println();
            }
        } while (finalTotal != 0);
    
        System.out.println(store.getHighestCustomerTotal() + " has spent the most with us today!");
    }
    }
    

    Store上课:

    import java.util.ArrayList;
    
    public class Store {
        // Creates an ArrayList.
        private ArrayList<CustomerAccount> accounts = new    ArrayList<CustomerAccount>();
    
        //
        public void addAccount(String anAccountName, double finalTotal) {
            accounts.add(new CustomerAccount(anAccountName, finalTotal));
        }
    
        // Gets the HIGHEST customer total.
        public String getHighestCustomerTotal() {
    
            CustomerAccount highest = accounts.get(0);
    
            for (int i = 1; i < accounts.size(); i++) {
                if (accounts.get(i).getTotal() > highest.getTotal())
                {
                    highest = accounts.get(i);
                }
            }
    
            return highest.getAccountName();
        }
    
    }
    

    CustomerAccount上课:

    public class CustomerAccount {
        // Variables defined to this class.
        private String accountName;
        private double total;
    
        // Constructor.
        public CustomerAccount(String anAccountName, double finalTotal) {
            accountName = anAccountName;
            total = finalTotal;
        }
    
        // Gets total from each customer.
        public double getTotal() {
            return total;
        }
    
        // Gets a customer's name.
        public String getAccountName() {
            return accountName;
        }
    }
    

2 个答案:

答案 0 :(得分:0)

你的主要循环:

  • 没有真正使用您输入的数据......人们希望这些数据可用于创建CustomerAccount实例
  • 最后有一个完全不必要的while(Condition)测试。这种循环通常使用While True完成,并且循环中的某些测试会突破循环。

getHighestCustomerTotal()

  • 你可以使用更多&#34;现代&#34; for()的形式,您可以直接迭代列表的元素,而不是迭代索引。

答案 1 :(得分:0)

我认为你的方法很好,它完成了工作。

我不太确定你要问的是如何循环两个输出语句,然后是否应该在main方法中。根据我的理解,通过查看代码,从主类中运行此输入循环是完全正常的。虽然我会在循环外部移动第一个“介绍性”输出,但是每次循环重复时都不会看到它,所以do-while很好。 另外,我注意到你实际上并没有在main方法中调用/实例化Store类,当它遍历帐户ArrayList时,没有数据被添加到Store类。

对于提出更“现代”方法的答案,我认为您使用的for循环很好。我认为这个人指的是for-each循环。使用少量数据循环使用它并不重要。

该循环的逻辑存在一些错误。 getHighestCustomerTotal()引用空帐户ArrayList。你在Store类中声明了一个ArrayList,并试图遍历它,但它是空的,除非你在某个时候从main方法调用addAccount()方法,所以你需要对它进行一些错误检查。