如何在数组中找到最小元素java时排除-1 sentinel值

时间:2016-11-12 18:36:31

标签: java

我试图找到大小为25的元素的数组中的最小元素由用户读取,并且应该在用户输入-1时停止

import java.util.*;
public class LabSheet4{
public static void main (String[] args){
Scanner read = new Scanner (System.in);

double scores[] = new double[25];
int minIndex=0, i =0, sentinel=0;


do{
scores[i] = read.nextDouble();
if(scores[i]==-1)
sentinel=-1;
i++;}while(sentinel!=-1);

for(int k=0;k<scores.length;k++)
if(scores[minIndex] > scores[k] && scores[minIndex]>0)
minIndex = k;
lowestScore = scores[minIndex];}}

如何排除-1?

5 个答案:

答案 0 :(得分:0)

根本不要在scores中存储-1。 这样你以后就不必排除它。

最重要的是, 它不是像你存储的其他值那样的功能值, 但是在处理输入的方式中具有特殊技术含义的符号。 因此,它不属于scores数组。

更改读取用户输入的循环, 以便不存储-1。 存储前检查输入, 如果它是-1,则跳出循环:

while (true) {
    double input = read.nextDouble();
    if (input == -1) {
        break;
    }
    scores[i++] = input;
}

顺便说一下,如果用户输入26个不是-1的值,会发生什么? 该程序将崩溃,因为scores只能存储25个值。 因此,您需要进一步改进以防止这种情况发生。 例如,您可以改为使用for循环:

for (int i = 0; i < scores.length; i++) {
    double input = read.nextDouble();
    if (input == -1) {
        break;
    }
    scores[i] = input;
}

答案 1 :(得分:0)

一种方法是不将值放在列表中,直到之后你知道它不是哨兵。

当您发现添加了哨兵时,另一种方法是不增加计数器。请注意,这意味着您需要一个稍微大一点的数组。

答案 2 :(得分:0)

一种方法是不将它存储在第一位,但另一种方法是在像这样在阵列上运行时忽略它。

   for(int k=0;k<scores.length;k++)
        if(scores[minIndex] > scores[k] && scores[minIndex]>0 && scores[k] !=1)

答案 3 :(得分:0)

这类问题的一个常见习惯是使用带有赋值和测试的map循环。像,

while

然后您可以从double scores[] = new double[25]; int i = 0; double score; while ((score = read.nextDouble()) != -1) { scores[i] = score; i++; } 开始并从0迭代到1(因为i是您的初始值,0是元素的数量) 。像,

i

答案 4 :(得分:0)

而不是

if(scores[i]==-1)
sentinel=-1;

使用

if (scores[i]==-1 && i > 0) {
    sentinel=-1;
    scores[i] = scores[minIndex];
    }

所以你用(到目前为止)最低值替换-1 - 这没关系,不是吗?