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

问题描述 投票:1回答:2

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

当我输入正确的数字时,我只是在命令提示符中出错。任何帮助都将受到高度赞赏。我正确地创建了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();
     }

   }

}
java arrays output
2个回答
2
投票

你现在所拥有的就是使用数组的目的。想象一下,你必须为Alphabet的所有字母做这件事,你会增加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,所以你必须为此添加一个catch。

如果你想让index可以在while条件下进行测试,那么在do块之前声明它而不进行初始化。


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,所以最好先修复你的基本bug并正确检查你的构造函数代码。最后,在发布关于SO的问题之前分享异常详细信息总是更好。

e.getActionCommand().equals("0")此行不会给出您在框架弹出窗口中输入的内容。检查这一点而不是使用inputArea.getText()将给你用户输入的数字。

© www.soinside.com 2019 - 2024. All rights reserved.