Java &引用;清晰的;ArrayList然后在不终止程序的情况下再次使用它
我想发生的事 输入=a、b、c、d 输出=a、b、c、d 输入(无终止程序)=e、f、g、h 输出=e、f、g、h 发生了什么事 输入=a、b、c、d 输出=a、b、c、d 输入(无终止程序)=e、f、g、h output=“empty” 代码 外面Java &引用;清晰的;ArrayList然后在不终止程序的情况下再次使用它,java,list,arraylist,Java,List,Arraylist,我想发生的事 输入=a、b、c、d 输出=a、b、c、d 输入(无终止程序)=e、f、g、h 输出=e、f、g、h 发生了什么事 输入=a、b、c、d 输出=a、b、c、d 输入(无终止程序)=e、f、g、h output=“empty” 代码 外面 public static ArrayList<String> alpha = new ArrayList<String>(); 基本上,打印结果后 alpha.clear(); alpha = new ArrayList
public static ArrayList<String> alpha = new ArrayList<String>();
基本上,打印结果后
alpha.clear();
alpha = new ArrayList<String>();
alpha.clear();
alpha=新的ArrayList();
然后,我询问用户是否要输入其他文本,此时返回一个空列表。另外请注意,当我不包括.clear时,它只会重复旧的输出
编辑:
publicstaticvoidstartdfa(List-listDFA){
对于(index=0;index我不确定您的if子句,因为您的输入是a、b、c、d或e、f、g、h,并且您正在寻找大括号(&)。我在您的代码中看到的一个问题是,您增加了curly变量计数,并且在第一次运行时工作正常,因为当您第一次运行应用程序时curly=0。但是在完成第一次运行后,您的curly将大于零,或者可以说是第一次运行时可能的最大值。您应该d在如下所述的循环外部的startDFA方法的开始处重置curly=0,或者在调用startDFA之前在主方法中设置curly=0。除此之外,如果需要,您还需要与curly一起清除Q、sigma、translation、start&finish arraylist。最好的地方是在star内部执行所有重置和清除操作外循环的tDFA方法
public static void startDFA(List<String> listDFA){
curly = 0
for (index = 0; index<size; index++){
}
}
publicstaticvoidstartdfa(List-listDFA){
卷曲=0
对于(index=0;index仅声明大量静态变量是糟糕的编码风格-您已经看到了发生的情况。声明一个类,将携带相关信息的变量放入字段(此处:2个列表)。声明最内部的其他变量(此处:curly)。不要声明无用的变量(此处:size,sizecurstring).使用紧凑的for语句
public class Curly {
private List<String> q = new ArrayList<>();
private List<String> sigma = new ArrayList<>();
public void startDFA( List<String> listDFA){
int curly = 0;
for( String curr: listDFA ){
if( curr.indexOf('{') != -1 ||
curr.indexOf('}') != -1 ){
curly++;
} // maybe: else
if (curly <= 2){
q.add(curr);
} else if( curly <5 ){
sigma.add(curr);
}
}
}
public void printVal(){
System.out.println("The states (Q) are: ");
System.out.println(q);
System.out.println("The elements (Sigma) are: ");
System.out.println(sigma);
}
}
如果程序需要增长,请添加更多的方法(例如,List getQ
)。避免静态。您可以添加更多的代码吗?我认为您在获得输入时没有在第二次向列表中插入值。@Nate您忽略的内容就是问题所在。@Nate调用x.clear()
在将新的ArrayList分配给x之前是多余的。在这两者之后,x中会有一个空列表(这里有一个细微的区别并不重要)。@Nate如果您的输入是a、b、c、d
或e、f、g、h
:为什么要计算花括号?listDFA中的字符串如何与这些输入相关(如果有的话)?请添加主要方法的内容。到目前为止,您提供的代码对您的问题没有帮助,甚至与您的问题没有关系。根据我的最佳猜测,您可能只是混淆了分配到正确的列表或从正确的列表中打印。就是这样,从未考虑过卷曲计数。谢谢!
public static void startDFA(List<String> listDFA){
curly = 0
for (index = 0; index<size; index++){
}
}
public class Curly {
private List<String> q = new ArrayList<>();
private List<String> sigma = new ArrayList<>();
public void startDFA( List<String> listDFA){
int curly = 0;
for( String curr: listDFA ){
if( curr.indexOf('{') != -1 ||
curr.indexOf('}') != -1 ){
curly++;
} // maybe: else
if (curly <= 2){
q.add(curr);
} else if( curly <5 ){
sigma.add(curr);
}
}
}
public void printVal(){
System.out.println("The states (Q) are: ");
System.out.println(q);
System.out.println("The elements (Sigma) are: ");
System.out.println(sigma);
}
}
Curly curly = new Curly();
curly.startDFA( listDFA );
curly.printVal();