调用已存储在ArrayList中的对象的方法

时间:2015-06-19 06:55:33

标签: java arrays object arraylist

我的程序到目前为止一切正常,但我的代码的这一部分出现问题:

    else if(input.equals("2")) {
        System.out.println("Enter the stock symbol:");
        symbol2 = in.next();
        System.out.println("Enter the number of shares you wish to sell:");
        sellshares = in.nextInt();
        String tempsymbol = "";
        for(int i=0; i<array1.size(); i++) {
            tempsymbol = (array1.get(i)).getSymbol();
            if(symbol2.equals(tempsymbol)) {
                System.out.println("The dollar cost averaged price per share (LIFO): " + (array1.get(i)).averageCost(sellshares));
                System.out.println("The dollar cost averaged price per share (FIFO): " + (array2.get(i)).averageCost(sellshares));
            }
        }
    }

它会经历循环,但tempsymbol总是=&#34;&#34;。为什么array1不返回任何内容?

这是我的所有代码。如果任何部件冗余或凌乱,请提前道歉。

    import java.util.*;
public class Whoop {

public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    String input = "";
    String symbol = "";
    String name = "";
    int shares = 0;
    double price = 0;
    String symbol2 = "";
    int sellshares = 0;
    int rolling = 0;
    stack theStack = null;
    queue theQ = null;
    String loopcheck = "1";
    ArrayList<stack> array1 = new ArrayList<stack>();
    ArrayList<queue> array2 = new ArrayList<queue>();

while(loopcheck.equals("1")) {
    System.out.println("Press 1 to enter a new stock or press 2 to find the LIFO and FIFO dollar cost average for the number of shares sold");
    input = in.next();

    if(input.equals("1")) {
        System.out.println("Enter the stock symbol:");
        symbol = in.nextLine();
        in.nextLine();
        System.out.println("Enter the stock name:");
        name = in.nextLine(); 
        System.out.println("Enter the number of shares bought:");
        shares = in.nextInt();
        System.out.println("Enter the price per share when purchased");
        price = in.nextDouble();
        theStack = new stack(symbol,name,shares,price);
        theQ = new queue(symbol,name,shares,price);
        System.out.println("Press 1 to continue entering new shares or press 2 to finish input for " + theStack.getName());
        rolling = in.nextInt();
        while(rolling == 1) {
            System.out.println("Enter the number of shares bought:");
            shares = in.nextInt();
            System.out.println("Enter the price per share when purchased");
            price = in.nextDouble();
            theStack.bigPush(shares, price);
            theQ.bigAdd(shares, price);
            System.out.println("Press 1 to continue entering new shares or press 2 to finish input for " + theStack.getName());
            rolling = in.nextInt();
        }
        array1.add(theStack); //I added the objects after all the values were finalized
        array2.add(theQ);
    }

    else if(input.equals("2")) {
        System.out.println("Enter the stock symbol:");
        symbol2 = in.next();
        System.out.println("Enter the number of shares you wish to sell:");
        sellshares = in.nextInt();
        String tempsymbol = "";
        for(int i=0; i<array1.size(); i++) {
            tempsymbol = (array1.get(i)).getSymbol();
            if(symbol2.equals(tempsymbol)) {
                System.out.println("The dollar cost averaged price per share (LIFO): " + (array1.get(i)).averageCost(sellshares));
                System.out.println("The dollar cost averaged price per share (FIFO): " + (array2.get(i)).averageCost(sellshares));
            }
        }
    }
    else {
        System.out.println("Input invalid ):");
        System.exit(0);
    }

    System.out.println("Press 1 to continue working with your stocks or press anything else to finish up");
    loopcheck = in.next(); 
    }
    System.out.println("END");
}

}

这是我的队列类,完全正常。

    import java.util.LinkedList;
    public class queue<E> {

private LinkedList<Double> linklist;
private String symbol;
private String name;
private int shares;
private Double price;

public queue(String symbol2, String name2, int shares2, Double price2) { 
    linklist = new LinkedList<Double>();
    shares = shares2;
    price = price2;
    symbol = symbol2;
    name = name2;
    bigAdd(shares, price);
}

   public String getName() {
       return name;
   }

   public String getSymbol() {
       return symbol;
   }

public void add(Double e) {
    linklist.add(e);
}

public Double take() {
    return linklist.poll();
}       

public void bigAdd (int shares2, Double price2) { 
    while(shares2>0) {
        linklist.add(price2);
        shares2--;
    }
}

public double averageCost(int shares2) {
    double average = 0;
    int sizer = 0;
    while(sizer < shares2) {
        average = average + linklist.poll();
        sizer++;
    }
    average = average/shares2;
    return average;
}

这是我的堆栈类,也可以正常工作。

    import java.util.*;
    public class stack { 

   private ArrayList<Double> stackArray = new ArrayList<Double>();
   private int top;
   private String symbol;
   private String name;
   private int shares;      
   private Double price;

   public stack(String symbol2, String name2, int shares2, Double price2) {
      symbol = symbol2;
      name = name2;
      shares=shares2;
      price=price2;
      top = -1;
      bigPush(shares, price);
   }

   public double averageCost(int shares2) {
       double average = 0;
       int sizer = shares2;
       while(sizer > 0) {
            average = average + stackArray.get(top--);
            sizer--;
        }
       average = average/shares2;
       return average;
   }

   public void push(Double value) {
      stackArray.add(++top, value);
   }
   public Double pop() {
      return stackArray.get(top--);
   }

   public String getName() {
       return name;
   }

   public String getSymbol() {
       return symbol;
   }

   public void bigPush(int shares2, Double price2) {
       while(shares2>0) {
            stackArray.add(++top, price2);
            shares2--;
        }
   }

   public static void main(String[] args) {
       stack theStack = new stack("Dave", "Franco", 2,10.0);
       theStack.bigPush(2,20.0);
       System.out.println(theStack.getSymbol());
   }

}

还有一个我输出的例子:

    Press 1 to enter a new stock or press 2 to find the LIFO and FIFO dollar cost average for the number of shares sold
    1
    Enter the stock symbol:
    DAVE
    Enter the stock name:
    FRANCO
    Enter the number of shares bought:
    5
    Enter the price per share when purchased
    5
    Press 1 to continue entering new shares or press 2 to finish input for FRANCO
    2
    Press 1 to continue working with your stocks or press anything else to finish up
    1
    Press 1 to enter a new stock or press 2 to find the LIFO and FIFO dollar cost average for the number of shares sold
    2
    Enter the stock symbol:
    DAVE
    Enter the number of shares you wish to sell:
    1
    //AND THEN NOTHING HERE WHEN IT SHOULD RETURN AVERAGECOST()
    Press 1 to continue working with your stocks or press anything else to finish up

1 个答案:

答案 0 :(得分:2)

按照你的长代码, 看起来这一切都归结为Scanner类的错误用法:

while(loopcheck.equals("1")) {
    System.out.println("Press 1 to enter a new stock or press 2 to find the LIFO and FIFO dollar cost average for the number of shares sold");
    input = in.next();

    if(input.equals("1")) {
        System.out.println("Enter the stock symbol:");
        symbol = in.nextLine(); // problem here
        in.nextLine();

这会将一个空字符串分配给symbol,因为它会消耗前一个in.next()的行尾。

如果您将其更改为:

while(loopcheck.equals("1")) {
    System.out.println("Press 1 to enter a new stock or press 2 to find the LIFO and FIFO dollar cost average for the number of shares sold");
    input = in.next();
    in.nextLine();
    if(input.equals("1")) {
        System.out.println("Enter the stock symbol:");
        symbol = in.nextLine();

它会起作用。

编辑:

您似乎意识到有时需要在不使用其返回值的情况下调用in.nextLine(),但是您将in.nextLine()置于错误的位置。