Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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
Java 比较预期的错误元素_Java_Arrays_String_Compareto - Fatal编程技术网

Java 比较预期的错误元素

Java 比较预期的错误元素,java,arrays,string,compareto,Java,Arrays,String,Compareto,我有以下代码;目的是按字母顺序返回数组中最小的成员 公共字符串(){ 字符串最小=”; int i=0; while(log[i]!=null){ int nextIndex=i+1; if(log[nextIndex]==null){ 打破 } 如果(日志[i].compareToIgnoreCase(日志[nextIndex])>0){ 最小值=对数[nextIndex]; } 否则{ 最小值=对数[i]; } i++; } if(log[i].compareToIgnoreCase(min

我有以下代码;目的是按字母顺序返回数组中最小的成员

公共字符串(){
字符串最小=”;
int i=0;
while(log[i]!=null){
int nextIndex=i+1;
if(log[nextIndex]==null){
打破
}
如果(日志[i].compareToIgnoreCase(日志[nextIndex])>0){
最小值=对数[nextIndex];
}
否则{
最小值=对数[i];
}
i++;
}

if(log[i].compareToIgnoreCase(minimate)假设java这样的东西应该可以工作。我没有测试它。C#在语法上有一个类似的工具。可以用索引完成,但这更干净

public String smallest() {
    String smallest = log[0]; //assumes atleast one element in list

    for (String message : log){
       if ( message != null && message.compareToIgnoreCase(smallest) < 0 ){
         smallest = message;
       }
    }

    return message;

    }

您只比较了列表中的两个连续项,而不是列表中的所有项。这就是为什么您的答案是错误的。如果对列表进行了排序,这会起作用,但首先要找出最小的项是很简单的。

假设java这样的东西应该起作用。我没有对它进行测试。C#对synta有类似的功能x、 可以使用索引完成,但这更干净

public String smallest() {
    String smallest = log[0]; //assumes atleast one element in list

    for (String message : log){
       if ( message != null && message.compareToIgnoreCase(smallest) < 0 ){
         smallest = message;
       }
    }

    return message;

    }

您只是在比较列表中的两个连续项目,而不是列表中的所有项目。这就是您的答案错误的原因。如果列表已排序,则这将起作用,但从一开始就可以很容易地找出最小的项目。

当这一行解决方案可以完成此工作时,您似乎将事情过度复杂化了:

return Collections.min(Arrays.asList(log), String.CASE_INSENSITIVE_ORDER);

看起来您正在将事情过度复杂化,而这一行解决方案可以完成这项工作:

return Collections.min(Arrays.asList(log), String.CASE_INSENSITIVE_ORDER);

显然,您的算法定义不明确。您正在将项目与其下一个项目进行比较。请尝试以下方法:

String minText = log[0];

for (int i = 1; i < log.length; i++)
{
    if (minText.compareToIgnoreCase(log[i]) > 0)
    {
        minText = log[i];
    }
}
String minText=log[0];
对于(int i=1;i0)
{
minText=log[i];
}
}

Louis Wasserman也是正确的,但我想向您展示算法。基本上,我们最初将minText设置为日志中的第一个元素。然后,从第二个元素到最后一个元素,我们始终在查看当前元素是否小于当前存储的minText。如果是,我们将该值指定给minText。

很抱歉,您的算法定义不明确。您正在将项目与其下一个项目进行比较。请尝试以下操作:

String minText = log[0];

for (int i = 1; i < log.length; i++)
{
    if (minText.compareToIgnoreCase(log[i]) > 0)
    {
        minText = log[i];
    }
}
String minText=log[0];
对于(int i=1;i0)
{
minText=log[i];
}
}

Louis Wasserman也是正确的,但我想向您展示算法。基本上,我们最初将minText设置为日志中的第一个元素。然后,从第二个元素到最后一个元素,我们始终在查看当前元素是否小于当前存储的minText。如果是,我们将该值指定给minText。

任何po那么可能的数组排序方法?我尝试过其他方法,但代码变得非常复杂,并且会产生更多问题。@noka现有的库函数可以对数组进行排序。看看这里有没有可能的数组排序方法?我尝试过其他方法,但是代码变得非常复杂,并且会产生更多问题。@noka有现有的libr数组排序的三元函数。看看这里compareTo()和它有什么关系?请准确的标题。compareTo()是什么跟它有关系吗?请给我准确的标题。据我所知…它返回数组中最小的元素,因为它是按字母顺序排列的,但是字符串。不区分大小写\u结尾的顺序是什么?…哎呀,我不知道回车键会自动发送我的注释。当我现在运行它时,我得到一个NullPointerException;我阅读了其他内容re这意味着集合中的一些字符串没有初始化,但如果我们只是按字母顺序排序并获取第一个字符串,这不重要,对吗?不,这完全重要;null是
字符串[]的完全有效的公民
。你应该做的是使用
ArrayList
而不是裸数组,并在上面执行
Collections.min
字符串。不区分大小写的顺序
最后说使用
compareTignoreCase
,基本上,而不是默认的区分大小写的顺序。从我所能看出的情况来看……这是ns是数组中最小的元素,因为它是按字母顺序排列的,但是字符串末尾的String.CASE_INSENSITIVE_ORDER有什么作用?…哎呀,我不知道enter键会自动发送我的注释。现在运行它时,我得到一个NullPointerException;我在别处读到这意味着集合中的一些字符串没有初始化,但是,如果我们只是按字母顺序排序并获取第一个,这不重要,对吗?不,这完全重要;空值是
字符串[]的完全有效的公民
。您可能应该使用
ArrayList
而不是裸数组,并对其执行
Collections.min
字符串。不区分大小写的顺序
最后说基本上使用
compareTogenoreCase
,而不是默认的区分大小写的顺序。实际上,我非常接近它有了这个答案!所有的测试都保存了1个使用它的工作。有问题的测试是:'public void test_3Elements_minimate_at_end(){strLog.insert(“string 3”);strLog.insert(“string 2”);strLog.insert(“string 1”);assertEquals(strLog.minimate(),“string 1”)}“为之前评论中的”道歉。这对我来说是新的,它说的是代码。无论如何,修改后的最小()代码现在是:public String minimest(){String minimest=log[0];for(int i=1;i0){minimate=log[i];}}返回minimate;}请不要对变量和方法使用相同的名称。也不需要nextIndex。如果nextIndex>log.length,则它将不会为null。相反,将抛出NullPointerException,这不是一件好事(在sim中描述它)