質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

5回答

503閲覧

メゾットからmain文に変数を使用できない。

cretter

総合スコア91

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/08/04 09:49

編集2020/08/08 12:45

前提・実現したいこと

ラベルに張り付けるはずの変数"x"をmain文で使用できるようにしたくてその時にreturnを使って使用できるようにしたかったのですができませんでした。できるようにする方法を教えてください。また、それをラベルで表示されている数字の更新の仕方を教えてください。

発生している問題・エラーメッセージ

denpart0203.java:187: エラー: '.class'がありません return int x; ^

該当のソースコード

import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JTextField; import javax.swing.border.LineBorder; import javax.swing.*; import java.awt.Font; import java.awt.Color; import java.awt.image.BufferedImage; import java.awt.Container; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.Dimension; import java.awt.event.*; import java.awt.event.KeyEvent; import java.io.File; import javax.imageio.ImageIO; public class denpart0203 extends JFrame implements ActionListener{ static int x; JLabel label01 = new JLabel("" + x ); //ラベルを作成 public static void main(String[] args){ denpart0203 den = new denpart0203("Test"); den.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); den.setVisible(true); } denpart0203(String title){ setTitle("電卓"); setBounds(100, 100, 400, 600); getContentPane().setBackground( Color.WHITE ); JPanel panel01 = new JPanel(); LineBorder border01 = new LineBorder(Color.BLACK, 2, true); //ボーダーラインを作成 panel01.setBorder(border01); //ボーダーラインを表示 setLayout(new FlowLayout()); //レイアウトを選択 panel01.setPreferredSize(new Dimension(250, 350)); //パネルのサイズを指定 panel01.setBackground( new Color(200,255,255) ); //パネルの色を指定 JButton button01 = new JButton("1"); //ボタンを作成 JButton button02 = new JButton("2"); //ボタンを作成 JButton button03 = new JButton("3"); //ボタンを作成 JButton button0pu = new JButton("+"); //ボタンを作成 JButton button04 = new JButton("4"); //ボタンを作成 JButton button05 = new JButton("5"); //ボタンを作成 JButton button06 = new JButton("6"); //ボタンを作成 JButton button0ma = new JButton("ー"); //ボタンを作成 JButton button07 = new JButton("7"); //ボタンを作成 JButton button08 = new JButton("8"); //ボタンを作成 JButton button09 = new JButton("9"); //ボタンを作成 JButton button0ka = new JButton("X"); //ボタンを作成 JButton button0ze = new JButton("0"); //ボタンを作成 JButton button0zero = new JButton("00"); //ボタンを作成 JButton button0wa = new JButton("÷"); //ボタンを作成 JButton button0ce = new JButton("ce"); //ボタンを作成 JButton button0iko = new JButton("="); //ボタンを作成 JButton button0back = new JButton("bs"); //ボタンを作成 button01.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button02.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button03.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button0pu.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button04.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button05.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button06.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button0ma.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button07.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button08.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button09.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button0ka.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button0ze.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button0zero.setPreferredSize(new Dimension(105, 50)); //ボタンのサイズを指定 button0wa.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button0ce.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 button0iko.setPreferredSize(new Dimension(105, 50)); //ボタンのサイズを指定 button0back.setPreferredSize(new Dimension(50, 50)); //ボタンのサイズを指定 getRootPane().setDefaultButton(button0iko); //Enterを押すと[button0iko]を起動 //0はゼロ JPanel panel201 = new JPanel(); panel201.setBorder(border01); //ボーダーラインを表示 panel201.setPreferredSize(new Dimension(215, 50)); //パネルのサイズを指定 panel201.setBackground( Color.WHITE ); //パネルの色を指定 button01.setMnemonic(KeyEvent.VK_1); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button02.setMnemonic(KeyEvent.VK_2); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button03.setMnemonic(KeyEvent.VK_3); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button04.setMnemonic(KeyEvent.VK_4); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button05.setMnemonic(KeyEvent.VK_5); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button06.setMnemonic(KeyEvent.VK_6); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button07.setMnemonic(KeyEvent.VK_7); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button08.setMnemonic(KeyEvent.VK_8); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button09.setMnemonic(KeyEvent.VK_9); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button0ze.setMnemonic(KeyEvent.VK_0); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button0zero.setMnemonic(KeyEvent.VK_Z); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button0pu.setMnemonic(KeyEvent.VK_Q); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button0ma.setMnemonic(KeyEvent.VK_W); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button0ka.setMnemonic(KeyEvent.VK_E); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button0wa.setMnemonic(KeyEvent.VK_R); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button0back.setMnemonic(KeyEvent.VK_A); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 button0ce.setMnemonic(KeyEvent.VK_S); //VKをALTキーとする そして_の後にあるキーを押されると[button]が起動 add(panel01); //パネルをフレームに表示 panel01.add(panel201); //パネルの中にパネルを表示 panel01.add(button01); //ボタンを表示 panel01.add(button02); //ボタンを表示 panel01.add(button03); //ボタンを表示 panel01.add(button0pu); //ボタンを表示 panel01.add(button04); //ボタンを表示 panel01.add(button05); //ボタンを表示 panel01.add(button06); //ボタンを表示 panel01.add(button0ma); //ボタンを表示 panel01.add(button07); //ボタンを表示 panel01.add(button08); //ボタンを表示 panel01.add(button09); //ボタンを表示 panel01.add(button0ka); //ボタンを表示 panel01.add(button0ze); //ボタンを表示 panel01.add(button0zero); //ボタンを表示 panel01.add(button0wa); //ボタンを表示 panel01.add(button0ce); //ボタンを表示 panel01.add(button0iko); //ボタンを表示 panel01.add(button0back); //ボタンを表示 panel201.add(label01); //パネルをフレームに表示 button01.addActionListener(this); button01.setActionCommand("btn01"); button02.addActionListener(this); button02.setActionCommand("btn02"); button03.addActionListener(this); button03.setActionCommand("btn03"); button04.addActionListener(this); button04.setActionCommand("btn04"); button05.addActionListener(this); button05.setActionCommand("btn05"); button06.addActionListener(this); button06.setActionCommand("btn06"); button07.addActionListener(this); button07.setActionCommand("btn07"); button08.addActionListener(this); button08.setActionCommand("btn08"); button09.addActionListener(this); button09.setActionCommand("btn09"); button0ze.addActionListener(this); button0ze.setActionCommand("btn0ze"); button0zero.addActionListener(this); button0zero.setActionCommand("btn0zero"); button0pu.addActionListener(this); button0pu.setActionCommand("btn0pu"); button0ma.addActionListener(this); button0ma.setActionCommand("btn0ma"); button0ka.addActionListener(this); button0ka.setActionCommand("btn0ka"); button0wa.addActionListener(this); button0wa.setActionCommand("btn0wa"); button0ce.addActionListener(this); button0ce.setActionCommand("btn0ce"); button0iko.addActionListener(this); button0iko.setActionCommand("btn0iko"); button0back.addActionListener(this); button0back.setActionCommand("btn0back"); } public void actionPerformed(ActionEvent e){ String cmd = e.getActionCommand(); if (cmd.equals("btn01")){ put("1"); x = 1; put( x + "カウント"); return x; }else if (cmd.equals("btn02")){ put("2"); }else if (cmd.equals("btn03")){ put("3"); }else if (cmd.equals("btn04")){ put("4"); }else if (cmd.equals("btn05")){ put("5"); }else if (cmd.equals("btn06")){ put("6"); }else if (cmd.equals("btn07")){ put("7"); }else if (cmd.equals("btn08")){ put("8"); }else if (cmd.equals("btn09")){ put("9"); }else if (cmd.equals("btn0ze")){ put("0"); }else if (cmd.equals("btn0pu")){ put("+"); }else if (cmd.equals("btn0ma")){ put("ー"); }else if (cmd.equals("btn0ka")){ put("X"); }else if (cmd.equals("btn0wa")){ put("÷"); }else if (cmd.equals("btn0ce")){ put("ce"); }else if (cmd.equals("btn0iko")){ put("="); }else if (cmd.equals("btn0back")){ put("bs"); }else if (cmd.equals("btn0zero")){ put("00"); } } static void put( String str ) { System.out.println( str ); } }

試したこと

public void actionPerformed(ActionEvent e){
・・・
}
のvoidをintにしてみましたが、
denpart0203.java:187: エラー: '.class'がありません
return int x;
^
エラー1個
とでできました。

補足情報(FW/ツールのバージョンなど)

java jdk-14.0.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

入力値を入れるレジスタを x、計算結果を入れるレジスタを y とし、
ラベルにはどちらかを表示するようにすればよいでしょう。
今、どちらを表示しているかを示すフラグも必要です。

Java

1import javax.swing.*; // JFrame, JLabel, JPanel, JButton 2import javax.swing.border.LineBorder; 3import java.awt.*; // Container, FlowLayout, Dimension 4import java.awt.Color; 5import java.awt.event.*; 6import java.awt.event.KeyEvent; 7 8public class denpart0203 extends JFrame implements ActionListener { 9 int x = 0; // 入力値 10 int y = 0; // 計算結果 11 int op = 0; // 演算子(operator) 12 boolean dispY = false; // 計算結果表示フラグ 13 JLabel label01 = new JLabel("0"); 14 15 public static void main(String[] args){ 16 denpart0203 den = new denpart0203(); 17 den.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 18 den.setVisible(true); 19 } 20 21 denpart0203() { 22 setTitle("電卓"); 23 setBounds(100, 100, 400, 600); 24 Container cnt = getContentPane(); 25 cnt.setBackground(Color.WHITE); 26 27 JPanel panel01 = new JPanel(); 28 LineBorder border01 = new LineBorder(Color.BLACK, 2, true); 29 panel01.setBorder(border01); 30 setLayout(new FlowLayout()); 31 32 panel01.setPreferredSize(new Dimension(250, 350)); 33 panel01.setBackground(new Color(200, 255, 255)); 34 JPanel panel201 = new JPanel(); 35 panel201.setBorder(border01); 36 panel201.setPreferredSize(new Dimension(215, 50)); 37 panel201.setBackground(Color.WHITE); 38 39 cnt.add(panel01); 40 panel01.add(panel201); 41 panel201.add(label01); 42 43 JButton[] button0 = new JButton[18]; 44 String[] str = { 45 "1", "2", "3", "+", 46 "4", "5", "6", "-", 47 "7", "8", "9", "X", 48 "0", "00", "÷", 49 "ce", "=", "bs" 50 }; 51 String[] str2 = { 52 "btn01", "btn02", "btn03", "btn0pu", 53 "btn04", "btn05", "btn06", "btn0ma", 54 "btn07", "btn08", "btn09", "btn0ka", 55 "btn00", "btn0zero", "btn0wa", 56 "btn0ce", "btn0iko", "btn0back" 57 }; 58 int ke[] = { 59 KeyEvent.VK_1, KeyEvent.VK_2, KeyEvent.VK_3, KeyEvent.VK_Q, 60 KeyEvent.VK_4, KeyEvent.VK_5, KeyEvent.VK_6, KeyEvent.VK_W, 61 KeyEvent.VK_7, KeyEvent.VK_8, KeyEvent.VK_9, KeyEvent.VK_E, 62 KeyEvent.VK_0, KeyEvent.VK_Z, KeyEvent.VK_R, 63 KeyEvent.VK_A, KeyEvent.VK_T, KeyEvent.VK_S 64 }; 65 Dimension d = new Dimension(50, 50), d2 = new Dimension(105, 50); 66 for (int i = 0; i < 18; i++) { 67 button0[i] = new JButton(str[i]); 68 button0[i].setPreferredSize(d); 69 button0[i].setMnemonic(ke[i]); 70 button0[i].addActionListener(this); 71 button0[i].setActionCommand(str2[i]); 72 panel01.add(button0[i]); 73 } 74 button0[13].setPreferredSize(d2); 75 button0[16].setPreferredSize(d2); 76 getRootPane().setDefaultButton(button0[16]); 77 } 78 79 public void actionPerformed(ActionEvent e){ 80 String cmd = e.getActionCommand(); 81 put(cmd); 82 char c = cmd.charAt(4); 83 if (Character.isDigit(c)) { 84 if (dispY) x = 0; 85 x = x * 10 + (c - '0'); label01.setText("" + x); dispY = false; 86 } 87 else if (c == 'z') { 88 if (dispY) x = 0; 89 x *= 100; label01.setText("" + x); dispY = false; 90 } 91 else if ("pmkwi".indexOf(c) >= 0) calc(c); 92 else if (c == 'c') { 93 x = y = 0; op = 0; label01.setText("0"); dispY = false; 94 } 95 else if (c == 'b') { 96 x /= 10; label01.setText("" + x); dispY = false; 97 } 98 } 99 100 void calc(char c) { 101 boolean div0 = false; 102 if (!dispY) { 103 switch (op) { 104 case 'p': y += x; break; 105 case 'm': y -= x; break; 106 case 'k': y *= x; break; 107 case 'w': if (x == 0) div0 = true; else y /= x; break; 108 default: y = x; break; 109 } 110 x = y; 111 } 112 op = c; 113 label01.setText(div0 ? "Error" : "" + y); 114 dispY = true; 115 } 116 117 void put(String str) { System.out.println(str); } 118} 119

ボタンは配列にすると同様の処理を for文にまとめることができます。
小数点の入力もなくて int の四則演算なのですね。

追記
「+-×÷=」の連続入力による処理が不十分なのでコードを修正しました。

さて、「メゾットからmain文に変数を使用できない。」というタイトルですが、
まず「メゾット」でなく「メソッド」です。
次に main は「文」ではなく「メソッド」です。

x は、denpart0203クラスのフィールドなので、
denpart0203クラスのどのメソッドからも自由に使用できます。
denpart0203クラスは main の中で new されているので、
x は static にしなくても、使用できます。

投稿2020/08/10 03:13

編集2020/08/11 02:07
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

通常Swing(GUIプログラム)ではmainメソッドは質問コードの処理程度で、追加のコードが入ることはありません(「イベント駆動」等で調べてみてください)
つまりmainでint xをどうのこうのすることはありません。

ラベルで表示されている数字の更新の仕方

Java

1if (cmd.equals("btn01")) { 2 put("1"); 3 String text = label01.getText(); // 今入ってる文字列 4 label01.setText(text + "1"); // それに1を追加 5}

大枠はこういうことですが、うまくやらないとスパゲッティーコードになりそうです^^;
Javaでの電卓は作例も多いので「java swing 電卓」等で検索すると、参考になるものもあるでしょう。

投稿2020/08/08 14:00

編集2023/07/22 10:22
TN8001

総合スコア9321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

型宣言は一つの変数に一回でいいです。
今回の例では、intと書くのは最初の一回のみで十分ということです。

型を書くのは、変数を新たに定義する時です。
この場合、public void actionPerformed(ActionEvent e)内でint xをしているため、
フィールドとして作っている変数を使わず、新たにローカル変数を作って使ってしまっています。
これをやめれば、フィールドのxに代入され、returnを使うまでもなく、xが変数の外部から使用可能になります。

そうすればreturnを使うまでもなく代入したxが全体で使えるようになります。

投稿2020/08/04 10:34

編集2020/08/04 10:41
ozraru

総合スコア150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

タイミングの問題なので、mainで使えるかは微妙ですが

java

1 put("1"); 2 int x = 1; 3 put( x + "カウント"); 4 return int x;

java

1 put("1"); 2 x = 1; 3 put( x + "カウント"); 4

にすれば、static変数であるdenpart0203.x は、1になりますよね。
とはいえ、

java

1JLabel label01 = new JLabel("" + x ); //ラベルを作成

は、xがゼロの時点で生成されるのではと思うので、1になっていない可能性が高いですよね。

投稿2020/08/04 10:29

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

当該のメソッドはpublic void actionPerformed(略)であり、返り値型はvoid、すなわち返り値は返せません

投稿2020/08/04 09:52

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cretter

2020/08/04 09:55

「試したこと」にも記載しましたが返り値の型をintにしてもダメでした。 どんな返り値が良いでしょうか?
cretter

2020/08/04 10:01

>implements ActionListenerをしている以上、actionPerformedの返り値はvoidと決まっています。 どうすればvoidで変化させた変数をmain文で使用できるようになれますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問