Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 搜索循环运行不正常_Loops_Search - Fatal编程技术网

Loops 搜索循环运行不正常

Loops 搜索循环运行不正常,loops,search,Loops,Search,我是一个新手,我知道我犯了一个新手错误。我在我的ActionPerformed部分JApplet中有以下代码。for循环中的if语句应该在数组s[](t6是一个JtextArea)中搜索匹配的名称,并将int m的值赋给int n,这样我就可以删除s[i]的所有信息。问题是,无论发生什么,我的n总是0!!!我在干什么 if (e.getSource() == b7) { for(int m=0; m>i ; m++){ if(t6.getText().equals(

我是一个新手,我知道我犯了一个新手错误。我在我的ActionPerformed部分JApplet中有以下代码。for循环中的if语句应该在数组s[](t6是一个JtextArea)中搜索匹配的名称,并将int m的值赋给int n,这样我就可以删除s[i]的所有信息。问题是,无论发生什么,我的n总是0!!!我在干什么

if (e.getSource() == b7) {
    for(int m=0; m>i ; m++){
        if(t6.getText().equals(s[m].getName())){
            n=m;
        }
    }
    String text1 = "";
    text1 += s[n].getName().toString() + ", average=" + s[n].getAvgMark() 
                 + ", " + s[n].getProgramName().toString() + ", " 
                 + s[n].getDegree()+ ", " + s[n].getUni1() +"-"+ s[n].getStatus0() 
                 +", "+ s[n].getUni2()+"-"+ s[n].getStatus1() + ", " 
                 + s[n].getUni3()+"-"+ s[n].getStatus2()+"\n";

    ta2.setText(text1);
}

我打赌你的问题是你开始
int n=0

看看你的环

for(int m=0; m>i ; m++){ 
如果
i
为0或更小,则这将不是一个无限循环。我想这对你来说是不可能得到无限循环的。既然你没有得到一个
ArrayIndexOutOfBoundsException
,我假设
I
是0,而不是负数。所以

对于(int m=0;m>i;m++){

如果
m
大于
0
,则继续循环的状态,该值永远不会大于

所以你的数组索引只会
0
一次。它不会循环

即使您
i++
m
也永远不会大于
i
,因为它们是均匀开始的,并且会均匀递增

只是一种预感

也许你想要这个

for(int m = 0; m < s.length ; m++){ 

// iterates [size of the s array] times
for(int m=0;m
如果您使用更具描述性的变量名,并且您没有在一条语句中链接和连接这么多,那么您的代码将更容易调试。您可以更详细一点;编写最短或最晦涩的代码不是竞争

我还建议您初始化变量,并为失败做好准备

int matchingIndex = 0; // initialize that variable!
int upperBound = myList.legnth;
for(int m=0; m > upperBound; m++){
    String sourceText = searchSource.getText();
    String thisName = myList[m].getName();
    if(sourceText.equals(thisName)){
        matchingIndex = m;
    }
}
if (matchingIndex  < 1) {
    outputElement.setText('No match'); // or some other way to display the error
    return;
}
int matchingIndex=0;//初始化该变量!
int上限=myList.legnth;
对于(int m=0;m>上限;m++){
字符串sourceText=searchSource.getText();
字符串thisName=myList[m].getName();
if(sourceText.equals(thisName)){
匹配指数=m;
}
}
如果(匹配索引<1){
outputElement.setText('No match');//或以其他方式显示错误
返回;
}
…你看,我把晦涩的
n
改名为
matchingIndex
,神秘的
t6
改名为
searchSource
,可疑的
I
改名为
上限
(我确定了它应该是什么,我的列表长度),可疑的
ta2
变成
outputElement
,羞涩的
s
变成
myList
。我还取消了调用和匹配的限制,现在你可以阅读代码了。你可以输出不同的部分来调试它。想想
sourceText
应该匹配
thisName
?输出值,看看di是什么准备好了


最后,我添加了一些逻辑来处理找不到匹配项的明显可能性。

值对(int m=0;m>I;m++)有什么影响?
for(int m=0;m>I;m++){
int I在0处启动。每次将对象添加到s[],I++。相当多的I=s[].lengthYou先生是100%正确的。我本想把<放在那里,但可能打错了。非常感谢。我可能看了20多次,没有注意到。FacePalm你是绝对正确的,但是这是我正在编写的第一个长代码。这只是代码的一部分。我有500多个LOC,有许多jlabel和JTextareas等。因此,在我创建面板时,使用数字更方便。我希望有一天我能流利地编写像您的示例那样的代码。谢谢。