ページ 11

java言語の質問なのですが

Posted: 2014年5月06日(火) 12:17
by サイズ
イクリプスを使用して自分で使う簡単なツールを作成しようと考えています。

コード:

package mypackage;

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JFormattedTextField;
import javax.swing.JTextField;
import java.awt.event.*;
import javax.swing.event.AncestorListener;
import javax.swing.event.AncestorEvent;
import javax.swing.JButton;
import javax.swing.JScrollPane;

public class kankore extends JFrame implements ActionListener {
	private JPanel contentPane;
	final String[] name = {"睦月","如月","弥生","望月","霰","陽炎","不知火","朝潮",
			"満潮","大潮","荒潮","阿武隈","曙","潮","霞","那智","足柄","多摩",
			"木曾","加古","青葉","衣笠","天龍","翔鶴","瑞鶴","扶桑","山城","最上",
			"時雨","愛宕","高雄","鳥海","摩耶","古鷹"};

	JLabel moji;
	JTextField in;
	JPanel panel;
	
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					kankore frame = new kankore();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
	public kankore(){
		setTitle("艦隊コレクション用適当自作ツール");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 415, 310);
		
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel label_1 = new JLabel("【クエストで使用するかしないかを調べます】");
		label_1.setBounds(12, 10, 334, 13);
		contentPane.add(label_1);
		
		JLabel label = new JLabel("艦娘の名前を入力してください");
		label.setBounds(12, 25, 255, 13);
		contentPane.add(label);
		
		//入力ボックス(?)の生成
		in = new JFormattedTextField();
		in.setBounds(12, 41, 94, 19);
		contentPane.add(in);
		
		//ボタンの生成
		JButton button = new JButton("検索");
		button.setBounds(108, 40, 67, 21);
		contentPane.add(button);
		
		//イベントで入力されてから表示する
		moji = new JLabel();
		moji.setBounds(12, 61, 231, 13);
		contentPane.add(moji);
		
		//検索を押したらイベント発生「actionPerformed」へ処理移行
		button.addActionListener(this); 
		
	}
	public void actionPerformed(ActionEvent e) {
		String str = in.getText(); //テキストフィールドからテキストを読み込む
		for(int i=0;i<=34;i++){
			if(str==name[i]){
				moji.setText("その艦娘はクエストで使用します");//テキストをmojiに格納
				in.setText("");//テキストフィールドをクリア
			}else{
				moji.setText("その艦娘はクエストで使用しません");//テキストをmojiに格納
				in.setText("");//テキストフィールドをクリア
			}
		}
		in.setColumns(10);
	}
}
上記のプログラムを起動してnameの配列の中にある文字列を入力しても偽の判定になってしまいます。
真の判定を出したいのですが、何を間違えているのか分かる方はいらっしゃいませんか?

Re: java言語の質問なのですが

Posted: 2014年5月06日(火) 12:38
by みけCAT
Javaの==はインスタンスが同一かを判定します。
79行目のstr==nameをstr.equals(name)にしてください。

Re: java言語の質問なのですが

Posted: 2014年5月06日(火) 12:48
by サイズ
ご返答ありがとうございます。
自分の想像通りの動きをしてくれるようになりました。
また真の判定の最後にreturn;を付け忘れていたことも原因でした。