数组输入数字0-2,并输出相应的字母a,b,c

时间:2019-03-10 23:02:33

标签: java arrays output

我用元素(“ A”,“ B”,“ C”)创建了数组 如果用户在输出标签(例如outputLabel.setText(array [0]))上输入“ 0”,则输出“ A”。

当我输入正确的数字时,我只是在命令提示符中出现错误。任何帮助,将不胜感激。我已经正确创建了GUI。只是不确定数组和输出。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class GuiFrame extends JFrame implements ActionListener {

String[] stringArray = {"A", "B", "C"};
JTextField inputArea;
JLabel theOutputLabel;


public GuiFrame() {

    JPanel panel = new JPanel();
    JLabel label1 = new JLabel("Please enter the index of the array to 
output: ");
    JLabel outputLabel = new JLabel("Array index");
    JTextField userInput = new JTextField ();
    JButton inputButton = new JButton("Go");
    String inputFromUser = userInput.getText();

    Container contentPane = getContentPane();

    panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
    panel.add(label1);
    panel.add(outputLabel);
    panel.add(userInput);
    panel.add(inputButton);

    inputButton.addActionListener(this);

    contentPane.add(panel);
    setSize(250, 250);
    setVisible(true);
    userInput.setSize(250,50);

    System.out.println(inputFromUser);

    String stringArray[] = new String[3];


  }


public static void main(String[] args){
    new GuiFrame();
}

@Override
public void actionPerformed(ActionEvent e) {

    String userInput = inputArea.getText();
try {
    do {
        if (e.getActionCommand().equals("0"))
            theOutputLabel.setText(stringArray[0]);
        if (e.getActionCommand().equals("1"))
            theOutputLabel.setText(stringArray[1]);
        if (e.getActionCommand().equals("2"))
            theOutputLabel.setText(stringArray[2]);
    }while(e.getActionCommand().equals("0") || e.getActionCommand().equals("1") || e.getActionCommand().equals("2"));

    System.out.println("You have entered a number that is outside of the range of the array index please try again");

    }

catch (ArrayIndexOutOfBoundsException arrayError){
    System.out.println("Array Index Out of Bounds");
    arrayError.printStackTrace();
     }

   }

}

2 个答案:

答案 0 :(得分:2)

您现在拥有的东西无法达到使用数组的目的。想象一下,您必须对字母表中的所有字母都这样做,您会添加26个条件吗?如果您有成千上万种选择怎么办?

因此,而不是

    /** DON'T DO THIS */

    if (e.getActionCommand().equals("0"))
        theOutputLabel.setText(stringArray[0]);
    if (e.getActionCommand().equals("1"))
        theOutputLabel.setText(stringArray[1]);
    if (e.getActionCommand().equals("2"))
        theOutputLabel.setText(stringArray[2]);

您应该解析输入并根据索引从数组中获取元素。

/** DO THIS */ 

int index = Integer.parseInt(e.getActionCommand());

theOutputLabel.setText(stringArray[index]);
如果输入不是有效的整数,

Integer.parseInt()可能会抛出java.lang.NumberFormatException,因此您必须为此添加一个捕获。

如果要在index条件下测试while,请在do块之前声明它而不进行初始化。

答案 1 :(得分:0)

除了@isapir提出的建议外,还请检查代码中是否有少数地方会导致 NullPointerExceptions

JTextField inputArea; // Not assigned will lead to NPE
JLabel theOutputLabel; // Not assigned will lead to NPE
String userInput = inputArea.getText(); // Because of inputArea unassigned this line will throw NPE for sure so fix that as well.

所以我假设您在cmdPrompt中遇到的异常是NPE,因此最好先修复基本错误并正确检查构造函数代码。最后,在SO上发布问题之前最好共享异常详细信息。

e.getActionCommand().equals("0"),此行不会显示您在框架弹出窗口中输入的内容。也请选中此复选框,而使用inputArea.getText()将为您提供用户输入的数字位数。