[解決済み] 式の型は配列型でなければなりませんが、intに解決しました - 動作する配列と同じ構文?
2022-02-02 08:48:29
質問
2つの配列があり、両方とも
int
型があります。その
costs[]
配列はエラーやバグもなく完全に動作しますが
stands
というメソッドで、「式の型は配列型でなければなりませんが、intに解決されました」というエラーが発生します。
buttonFunc
. その中で
init()
メソッドを呼び出すと
stands[1] = 0
で、これはうまくいくのですが、ほぼ同じことをすると(メソッドを呼び出すときに定義した整数に1を置き換える)、エラーが出ます。構文も使い方も全く同じ2つの配列で、なぜこのようなことができるのでしょうか?
`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);
}
}
解決方法は?
という名前の正式なパラメータがあります。
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
パラメータを使用します。これで大丈夫です。
関連
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】-XX:MaxPermSizeは何をするのですか?
-
[解決済み】java 'jar'が内部コマンドまたは外部コマンドとして認識されない。
-
[解決済み】java.io.IOException: 壊れたパイプ
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み] エラー - trustAnchors パラメータは空であってはなりません。
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件
-
[解決済み】CreateProcess error=2, The system cannot find file specified.
-
[解決済み] 配列のすべてのメンバーを同じ値で初期化するには?
-
[解決済み] メソッドは、タイプ内の別のメソッドと同じ消去を持つ
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】HTTPステータス 405 - リクエストメソッド「POST」はサポートされていません (Spring MVC)
-
[解決済み】このコンパイルユニットは名前付きモジュールに関連しているため、名前付きパッケージeclipseを宣言する必要があります。
-
[解決済み】javaで指定されたファイルが見つからない
-
[解決済み】指定された子にはすでに親がいます。先に子の親に対してremoveView()を呼び出す必要がある(Android)
-
[解決済み】Javaの部分文字列:「文字列のインデックスが範囲外」。
-
[解決済み】非閉鎖文字リテラルエラー
-
[解決済み】メソッド本体がない、またはJavaで抽象的な宣言をする
-
[解決済み】Javaでユーザー入力を待機させる方法
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み] JavaでSSLピアが正しくシャットダウンされない