Java 这是通过getText()将值存储到数组中的正确用法吗?
在Java程序的构造函数中,我有以下内容: 下面是对应的actionPerformed方法,它应该从一些文本字段中获取3个值并将它们存储到数组中:Java 这是通过getText()将值存储到数组中的正确用法吗?,java,arrays,gettext,Java,Arrays,Gettext,在Java程序的构造函数中,我有以下内容: 下面是对应的actionPerformed方法,它应该从一些文本字段中获取3个值并将它们存储到数组中: public void actionPerformed(ActionEvent e) { String arg = e.getActionCommand(); if (arg == "Submit") { //enlarge arrays qtyStr = enlargeArray(qtyStr);
public void actionPerformed(ActionEvent e)
{
String arg = e.getActionCommand();
if (arg == "Submit")
{
//enlarge arrays
qtyStr = enlargeArray(qtyStr);
typeStr = enlargeArray(typeStr);
colorStr = enlargeArray(colorStr);
//add from textfields into current
qtyStr[qtyStr.length-1] = qty.getText();
typeStr[typeStr.length-1] = type.getText();
colorStr[colorStr.length-1] = color.getText();
}
}
//method to enlarge an array by 1
public String[] enlargeArray(String[] currentArray)
{
String[] newArray = new String[currentArray.length + 1];
for (int i = 0; i<currentArray.length; i++)
newArray[i] = currentArray[i];
return newArray;
}
public void actionPerformed(ActionEvent e)
{
字符串arg=e.getActionCommand();
如果(arg==“提交”)
{
//放大阵列
qtyStr=放大阵列(qtyStr);
typeStr=放大数组(typeStr);
colorStr=放大阵列(colorStr);
//将文本字段添加到当前
qtyStr[qtyStr.length-1]=qty.getText();
typeStr[typeStr.length-1]=type.getText();
colorStr[colorStr.length-1]=color.getText();
}
}
//方法将数组放大1
公共字符串[]放大数组(字符串[]当前数组)
{
String[]newArray=新字符串[currentArray.length+1];
对于(inti=0;i您在这里遇到了一个问题:if(arg==“Submit”)
不要使用==
来比较字符串。请使用等于(…)
或相等信号案例(…)
方法。请理解,==
检查两个对象是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这就是这里的问题。因此
if (fu == "bar") {
// do something
}
做
或者
另外,为了安全起见,我尽量使用字符串常量,以免被拼写错误绊倒。这里有个问题:if(arg==“Submit”)
不要使用==
来比较字符串。请使用等于(…)
或相等信号案例(…)
方法。请理解,==
检查两个对象是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这就是这里的问题。因此
if (fu == "bar") {
// do something
}
做
或者
此外,为了安全起见,我尽可能使用字符串常量,以免被拼写错误绊倒。如果您希望以这种方式编写代码,我可能会做两件事:
1) 为下一个可用索引维护每个数组的索引字段,以及
2) 我不建议每次将数组的大小调整1,因为我们当前的代码在数组中运行了2n次(n=数组长度),第一次是初始化数组,第二次是创建新数组
优化此L的两个选项一个是查看Arrays类。它包含这样的方法,在这里可能很有用。您还可以检查数组是否已满,然后将其调整为大于1的数字,以减少额外的工作
例如:
import java.util.Arrays;
class Test{
private String[] a;
private int next;
public Test(int size){
a = new String[size];
next = 0;
}
public void add(String s){
if(next == a.length){
Arrays.copyOf(a, a.length+1);
}
a[next] = s;
next++;
}
}
最简单的方法是使用ArrayList(或实现java.util.List接口的任何类),正如Jon Skeet前面提到的,它将为您完成所有工作。如果您希望以这种方式编写代码,我可能会做两件事:
1) 为下一个可用索引维护每个数组的索引字段,以及
2) 我不建议每次将数组的大小调整1,因为我们当前的代码在数组中运行了2n次(n=数组长度),第一次是初始化数组,第二次是创建新数组
优化此L的两个选项一个是查看Arrays类。它包含这样的方法,在这里可能很有用。您还可以检查数组是否已满,然后将其调整为大于1的数字,以减少额外的工作
例如:
import java.util.Arrays;
class Test{
private String[] a;
private int next;
public Test(int size){
a = new String[size];
next = 0;
}
public void add(String s){
if(next == a.length){
Arrays.copyOf(a, a.length+1);
}
a[next] = s;
next++;
}
}
最简单的方法是使用ArrayList(或实现java.util.List接口的任何类),正如Jon Skeet之前提到的,它将为您完成所有工作。为什么不使用ArrayList
?您实际上在做类似的工作,但需要更多的faff(和更多的复制).你为什么不使用ArrayList
?你实际上在做类似的工作,但要用更多的假货(和更多的复制品)。谢谢,它能工作!另一个引起我注意的问题是ActionCommand的拼写错误…我会继续编码,谢谢大家!@user3648803:这是使用字符串常量的一个很好的理由。谢谢,它能工作!另一个引起我注意的问题是ActionCommand的拼写错误…我会继续编码,谢谢大家@user3648803:这是使用字符串常量的一个强有力的理由。我认为ArrayList对于我来说更好,但我认为它们不能像我需要的那样(至少使用insertString)在文档中打印。我认为ArrayList对于我来说更好,但我认为它们不能像我需要的那样在文档中打印(至少使用insertString)。
import java.util.Arrays;
class Test{
private String[] a;
private int next;
public Test(int size){
a = new String[size];
next = 0;
}
public void add(String s){
if(next == a.length){
Arrays.copyOf(a, a.length+1);
}
a[next] = s;
next++;
}
}