Java 为什么我的if/else语句总是跳转到else

Java 为什么我的if/else语句总是跳转到else,java,swing,if-statement,string-comparison,Java,Swing,If Statement,String Comparison,我试着用我所能想到的每一种方式来阅读这篇文章,但就我的一生而言,我无法理解为什么actionlistener中的if/else语句永远不会将if语句求值为true。此程序旨在打开一个包含3个面板的JFrame。其中2个有8个随机按钮,上面有字母。当一个按钮被点击时,它应该说是元音还是辅音。然而,我的程序总是将按钮计算为辅音。我在哪里看不到程序中的逻辑信息流 import java.awt.BorderLayout; import java.awt.Container; import java.a

我试着用我所能想到的每一种方式来阅读这篇文章,但就我的一生而言,我无法理解为什么actionlistener中的if/else语句永远不会将if语句求值为true。此程序旨在打开一个包含3个面板的JFrame。其中2个有8个随机按钮,上面有字母。当一个按钮被点击时,它应该说是元音还是辅音。然而,我的程序总是将按钮计算为辅音。我在哪里看不到程序中的逻辑信息流

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.EventQueue;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.FlowLayout;
import javax.swing.BoxLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Random;


public class JVowelConsenant extends JFrame {

private JPanel contentPane;
ArrayList list = new ArrayList(0);



/**
 * Launch the application.
 */
public static void main(String[] args) {

            try {
                JVowelConsenant frame = new JVowelConsenant();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }


/**
 * Create the frame.
 */
public JVowelConsenant() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 585, 371);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));

    JPanel panel = new JPanel();
    contentPane.add(panel);
    panel.setLayout(new GridLayout(2, 2, 0, 0));

    JPanel panel_1 = new JPanel();
    contentPane.add(panel_1);
    panel_1.setLayout(new GridLayout(2, 2, 0, 0));

    JPanel panel_2 = new JPanel();
    contentPane.add(panel_2);
    panel_2.setLayout(new GridLayout(2, 2, 0, 0));

    String[] alphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};

    JButton[] letters = new JButton[26];
    for (int i 0; i<8; i++) {       
        random_Letters();
    }



    for(int i=0; i<26; ++i) {
        letters[i] = new JButton();
        letters[i].setText(alphabet[i]);


        letters[i].addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) { 
                    if(arg0.getSource().equals("A")||arg0.getSource().equals("E")|| arg0.getSource().equals("I")||arg0.getSource().equals("O")||arg0.getSource().equals("U")){
                        JLabel letter_identity = new JLabel("This letter is a Vowel");
                        panel_2.removeAll();
                        panel_2.add(letter_identity);
                        panel_2.revalidate();
                    }
                    else{
                        JLabel letter_identity = new JLabel("This letter is a Consenant");
                        panel_2.removeAll();
                        panel_2.add(letter_identity);
                        panel_2.revalidate();
                    }

            }
        });
    }


    for(int i = 0; i<4;++i){
    panel.add(letters[(int) list.get(i)]);
    panel_1.add(letters[(int) list.get(i+4)]);
    }

}

void random_Letters(){
    Random random = new Random();
    int random_1 = random.nextInt(26);
    int check_point =exclusion(random_1);
    while(check_point == 0){
        random_1= random.nextInt(26);
        check_point = exclusion(random_1);
    }
}

int exclusion(int x){
    int marker = 0;
    if(!list.contains(x)){
        list.add(x);
        marker = 1;
    }
    return marker;


}


}
导入java.awt.BorderLayout;
导入java.awt.Container;
导入java.awt.EventQueue;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.border.EmptyBorder;
导入java.awt.FlowLayout;
导入javax.swing.BoxLayout;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.util.ArrayList;
导入java.util.Random;
公共类J元音连接扩展了JFrame{
私有JPanel内容窗格;
ArrayList=新的ArrayList(0);
/**
*启动应用程序。
*/
公共静态void main(字符串[]args){
试一试{
jvouelconsent帧=新的jvouelconsent();
frame.setVisible(true);
}捕获(例外e){
e、 printStackTrace();
}
}
/**
*创建框架。
*/
公共jvouelconsent(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
立根(100100585371);
contentPane=newjpanel();
setboorder(新的EmptyBorder(5,5,5,5));
setContentPane(contentPane);
setLayout(新的BoxLayout(contentPane,BoxLayout.X_轴));
JPanel面板=新的JPanel();
contentPane.add(面板);
panel.setLayout(新的GridLayout(2,2,0,0));
JPanel panel_1=新的JPanel();
contentPane.add(面板1);
面板_1.设置布局(新网格布局(2,2,0,0));
JPanel panel_2=新的JPanel();
contentPane.add(面板2);
面板2.设置布局(新网格布局(2,2,0,0));
字符串[]字母={“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”、“J”、“K”、“L”、“M”、“N”、“O”、“P”、“Q”、“R”、“S”、“T”、“U”、“V”、“W”、“X”、“Y”、“Z”};
JButton[]字母=新JButton[26];
for(int i 0;i
arg0.getSource()
将返回对触发事件的对象的引用,在本例中为
JButton

相反,您应该能够使用
ActionEvent#getActionCommand

String cmd = agr0.getActionCommmand();
//...
如果您使用的是Java 7+,您可能会发现使用
switch
语句更容易

switch (cmd) {
    case "A":
    case "E":
    case "I":
    case "O":
    case "U":
        // Vowel
        break;
    default:
        // Consenant
        break;
}
有关更多详细信息,请参见。getSource()
将返回对触发事件的对象的引用,在本例中为
JButton

相反,您应该能够使用
ActionEvent#getActionCommand

String cmd = agr0.getActionCommmand();
//...
如果您使用的是Java 7+,您可能会发现使用
switch
语句更容易

switch (cmd) {
    case "A":
    case "E":
    case "I":
    case "O":
    case "U":
        // Vowel
        break;
    default:
        // Consenant
        break;
}

有关更多详细信息,请参见

arg0.getSource()返回的事件对象从来都不等于A、E、I、O或U,这非常简单,因此将控件转移到其他对象

尝试使用 System.out.println(arg0.getSource())


要查看它返回的内容,arg0.getSource()返回的事件对象从来都不等于A、E、I、O或U,这非常简单,因此控件被带到其他对象

尝试使用 System.out.println(arg0.getSource())

要查看它返回的内容

“arg0.getSource()返回的事件对象从来都不等于A、E、I、O或U,这非常简单,因此控件被带到了其他位置”-我不会说“从来没有”,因为
String
是从对象扩展而来的,当然,您可以阅读“arg0.getSource()非常简单”返回从不等于A、E、I、O或U的事件对象,因此控件被带到else“-我不会说从不,因为
String
扩展自对象,当然,您可以只读取