gpt4 book ai didi

java - checkName() 以及将用户输入存储到 ArrayList 和 boolean[] 的问题

转载 作者:行者123 更新时间:2023-12-01 13:57:30 24 4
gpt4 key购买 nike

这里我有一个 GUI 窗口,它基本上要求用户选择 JRadioButton 并在 JTextField 中键入内容,然后选择确认/取消。

这是一个我们必须制作 UML-to-Java 文本文件的项目。用户将输入类信息并选择 UML 关系,并且该程序必须在 JTextField 上打印出 Java clsas 文本。就像在 eclipse 中创建一个新类一样。

我想要做的是创建一个 boolean[] 来存储 boolean 数组,当用户选择 JRadioButton_A 时它将存储 true,当用户选择 JRadioButton_B 时它将存储 false。而且我还想要在 JTextField 中输入的内容通过 checkName() 检查,如果该方法返回 false,则该字符串将存储在 ArrayList 中。

下面是我的代码 - getName() 方法和用于存储 true 和 false 的 boolean[] 存在一些问题。当用户需要再次输入名称时,它会将丢弃的字符串/boolean 值保存到数组中。 (抱歉我的英语不好!)有没有更好的方法来制作这个程序?我觉得我把事情复杂化了,应该有一个更简单的方法来实现它。

这是要求用户输入类(class)信息的 UI 内容。用户必须选择公共(public)/私有(private),然后输入类名和 JTextField

private class Handler implements ActionListener{
public void actionPerformed(ActionEvent event){
String name = inputClassName.getText();
classObject.addName(name);
while (classObject.checkName(name) == true){
JOptionPane.showMessageDialog(null, "Class name invalid. " +
"\nEntered name should not contain java keywords or equal to other existing names. " +
"\nPlease try again."); // doesn't work
name = inputClassName.getText();
classObject.addName(name);
}// end if
JOptionPane.showMessageDialog(null, "Class saved."); // doesn't work
name = inputClassName.getText();
classObject.addName(name);

}// end actionPerformed()
}// end Handler class

private class Handler2 implements ActionListener{
public void actionPerformed(ActionEvent event){
boolean b = true;
b = classObject.setPP();
}
}

private class Handler3 implements ActionListener{
public void actionPerformed(ActionEvent event){
boolean b = false;
b = classObject.setPP();
}
}

以下是将输入存储到 ArrayList 和 boolean[] 的方法

Scanner input = new Scanner(System.in);
JavaKeywords keyObject = new JavaKeywords();

private ArrayList<String> className = new ArrayList<String>();
private String name = new String();
private int size = className.size();
private Boolean[] bArray = new Boolean[size];


public boolean checkName(String name){
boolean check = true;
for (int i=0; i<=size; i++){
if (keyObject.containsKeyword(className.get(i)) || name.equals(className.get(i))){

boolean o = false;
check = o;
}// end if
}// end for
return check;
}// end checkName

public boolean setPP(){
boolean b = true;
return b;
}

public void addPP(Boolean[] bArray){
this.bArray = bArray;
for (int i=0; i>=size; i++){
bArray[i] = setPP();
}
}// add a Array of boolean. for className[i], its class type = item[i] in bArray.
// public = true, private = false
public String getPublicPrivate(){
String p = "";
for (int i =0; i<=size; i++){
if(bArray[i]=true)
p = "public";
else
p = "private";
}
return p;
}
<小时/>

已解决

解决方案:将string classNameboolean isPrivate存储在一个类中,并将该类放入ArrayList可以让我免于所有的麻烦。但后来我遇到了另一个问题,那就是 checkName() 在我更改代码后不起作用。这是 ActionListener

private class Handler implements ActionListener{
public void actionPerformed(ActionEvent event){

VirtualClass virtualObject = new VirtualClass();
classObject.addClass(virtualObject);
String name = inputClassName.getText();
virtualObject.className = name;

if (classObject.checkName(name) == false){
JOptionPane.showMessageDialog(null, "Class name invalid. " +
"\nEntered name should not contain java keywords or equal to other existing names. " +
"\nPlease try again."); // Always return "invalid" message
} else {
JOptionPane.showMessageDialog(null, "Class saved.");
name = inputClassName.getText();
virtualObject.className = name;
}

if (event.getSource() == publicButton) {
virtualObject.isPrivate = false;
} else if (event.getSource() == privateButton) {
virtualObject.isPrivate = true;
}

}// end actionPerformed()

这是 checkName() 方法

public boolean checkName(String name){
boolean check = true;
for (int i=0; i<=size; i++){
if (keyObject.containsKeyword(classes.get(i).className) || name.equals(classes.get(i).className)){
boolean o = false;
check = o;
}// end if
}// end for
return check;
}// end checkName

对于 checkName() 中的 containsKeyword(),我使用了 How to check if the class name is valid? 中的 JavaKeywords 类。作者:@MrLore。

最佳答案

我可能会做的是创建一个简单的类来表示您的字段,这样您就根本不必使用多个列表。

public class VirtualClass {
public boolean isPrivate;
public String className = "Object";
}

ArrayList<VirtualClass> classes = new ArrayList<VirtualClass>(0);

public void addClass(VirtualClass clazz) {
classes.add(clazz);
}

否则,您将不得不创建第二个某种类型的列表来保存公共(public)/私有(private)。您只需并行更改它们即可。

// in actionPerformed

ClassObject.VirtualClass clazz = new ClassObject.VirtualClass();

clazz.isPrivate = rbPrivate.isSelected();
clazz.className = tfClassName.getText();

classObject.addClass(clazz);

并且只需忽略单选按钮上的监听,因为从技术上讲,您不需要它们的状态,直到您将类添加到列表中。

要稍后访问这些字段,您只需要

for (VirtualClass clazz : classes) {
System.out.println((clazz.isPrivate ? "private" : "public") + " " + clazz.className);
}

// or something like

for (int i = 0; i < classes.size(); i++) {
System.out.println(classes.get(i).className + ":");
if (classes.get(i).isPrivate) {
System.out.println(" private");
} else {
System.out.println(" public");
}
}

关于java - checkName() 以及将用户输入存储到 ArrayList 和 boolean[] 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19550919/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com