2013-09-29 44 views
0

我有两个数组,都是int类型。 costs[]数组完美工作,没有错误或错误,但stands数组编码完全相同,在我定义的方法中出现错误“表达式的类型必须是数组类型,但它解析为int”该程序的底部名为buttonFunc。在init()方法中,我打电话stands[1] = 0,这工作正常,但是当我做几乎相同的事情(用您在调用方法时定义的整数替换1)时,它会给我带来错误。为什么两个数组在语法和用法上完全相同可以做到这一点?表达式的类型必须是数组类型,但它解析为int - 与数组的作用相同的语法?

`import java.applet.Applet; 
import java.awt.BorderLayout; 
import java.awt.Button; 
import java.awt.Canvas; 
import java.awt.FlowLayout; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.Rectangle; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.image.BufferStrategy; 
import java.text.DecimalFormat; 

import javax.swing.Timer; 


public class Main extends Applet implements Runnable, ActionListener { 
    private static final long serialVersionUID = 1L; 

    double money = 0; 
    double income = 2; //Actual income is this * 0.4 
    //int lemonadeStands = 0; 
    int cookieStands = 0; 
    int cupcakeStands = 0; 
    int cookieCost = 25; 
    int cupcakeCost = 75; 
    int modifier = 1; 

    int[] costs = new int[3]; 
    int[] stands = new int[3];    //Declaring the array - same as the costs[] array, but it doesn't work? 

    Button buyLemonade; 
    Button buyCookie; 
    Button buyCupcake; 

    int time = 0; 
    int timeComparison = (int) (Math.random()*50 + 120); 

    private Graphics dBufferedGraphic = null; 
    private Image dbufferedImage = null; 

    public void init() { 
     costs[1] = 10; 
     stands[1] = 0;     //No error here? 

     setLayout(new FlowLayout()); 
     buyLemonade = new Button("Buy a Lemonade Stand"); 
     buyCookie = new Button("Buy a Cookie Stand"); 
     buyCupcake = new Button("Buy a Cupcake Stand"); 

     add(buyLemonade); 
     add(buyCookie); 
     add(buyCupcake); 

     buyLemonade.addActionListener(this); 
     buyCookie.addActionListener(this); 
     buyCupcake.addActionListener(this); 

     t.start(); 
    } 

    public void paint(Graphics g) { 
     DecimalFormat df = new DecimalFormat("#.##"); 
     g.drawString("Money: $" + df.format(money), 10, 10); 
     g.drawString("Income: $" + income/2.5 + " per second", 10, 24); 
     g.drawString("Lemonade Stands: " + stands[1], 10, 52); 
     g.drawString("Cookie Stands: " + cookieStands, 10, 66); 
     g.drawString("Cupcake Stands: " + cupcakeStands, 10, 80); 
     g.drawString("Cost: " + costs[1], 355, 40); 
     g.drawString("Cost: " + cookieCost, 495, 40); 
     g.drawString("Cost: " + cupcakeCost, 620, 40); 
    } 

    public void run() {} 
    public void start() {} 
    public void stop() {} 
    public void destroy() {} 

    Timer t = new Timer(50, new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      money += income/50; //0.8 per second 
      repaint(); 
     } 
    }); 

    public void actionPerformed(ActionEvent e) { 
     /*if(e.getSource() == buyLemonade) { 
      if (money >= lemonadeCost) { 
      System.out.println("Lemonade stand bought. "); 
      income += 1; //0.4 actual 
      lemonadeStands++; 
      money -= lemonadeCost;      Replacing with method. 
      lemonadeCost += 4 * modifier; 
      modifier++; 
      }else System.out.println("Not enough money! "); 
     }*/ 
     buttonFunc(costs[1], 1, stands[1], 1, "Lemonade stand", 1); 
     if(e.getSource() == buyCookie) { 
      if (money >= cookieCost) { 
      System.out.println("Cookie stand bought. "); 
      income += 3; 
      cookieStands++; 
      money -= cookieCost; 
      cookieCost += 8 * modifier; 
      modifier += 2; 
      }else System.out.println("Not enough money! "); 
     } 
     if(e.getSource() == buyCupcake) { 
      if (money >= cupcakeCost) { 
      System.out.println("Cupcake stand bought. "); 
      income += 6; 
      cupcakeStands++; 
      money -= cupcakeCost; 
      cupcakeCost += 18 * modifier; 
      modifier += 3; 
      }else System.out.println("Not enough money! "); 
     } 
    } 

    public void buttonFunc(int cost, int incomeProduced, int stands, int modifierAmount, String name, int arrayLocation) { 
     if (money >= cost) { 
      System.out.println(name + " bought. "); 
      income += incomeProduced; 
      stands[arrayLocation] += 1;     //Where I get the error 
      money -= cost; 
      costs[arrayLocation] = (int) (costs[arrayLocation] + costs[arrayLocation] * 0.4); 
      modifier += modifierAmount; 
     }else System.out.println("Not enough money! "); 
    } 

    public void update (Graphics g) { 
     if (dbufferedImage == null) { 
       dbufferedImage = createImage(this.getSize().width, this.getSize().height); 
       dBufferedGraphic = dbufferedImage.getGraphics(); 
      } 
      dBufferedGraphic.setColor(getBackground()); 
      dBufferedGraphic.fillRect(0, 0, this.getSize().width, this.getSize().height); 

      dBufferedGraphic.setColor(getForeground()); 
      paint(dBufferedGraphic); 

      g.drawImage(dbufferedImage, 0, 0, this); 
    } 

} 

回答

1

您的方法中有一个名称为stands的正式参数,该参数隐藏了数组名称。所以,在你的方法stands是指形式参数,这是一个int,这就是错误的原因。

要么改变你的形参名称,或使用this引用实例数组类型字段stands

this.stands[arrayLocation] += 1; 

而且,好像你甚至没有使用你的方法stands参数。如果您打算传递数组出现,那么你的方法签名更改为:

public void buttonFunc(int cost, int incomeProduced, int[] stands, ...) 

,然后调用此方法为:

buttonFunc(costs[1], 1, stands, 1, "Lemonade stand", 1); // Change stands[1] to stands 

您也可以完全删除该方法的参数。由于stands是一个实例引用变量,因此您可以从任何实例方法访问它。此外,修改任何数组索引中的值将反映为实际的数组对象。所以,只需摆脱stands参数。没事的。

1

你传入看台[1],它是一个int值,而不是一个阵列reference.Also您接受int值,而不是阵列中的方法buttonFunc声明:

public void buttonFunc(int cost, int incomeProduced, int stands, int modifierAmount, String name, int arrayLocation) 

由于看台是一个int所以在array形式访问它会导致错误的行:

 stands[arrayLocation] += 1;     //Where I get the error 

而且你好像我之间的混淆thod参数costcosts在类级别上定义的数组。

+0

为什么没有成本'数组的问题,然后呢? – IHazABone

+0

@Iazazone您在全局数组的“成本”与方法输入参数“成本”之间混淆不清。 –

相关问题