我试图找到大小为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?
答案 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
- 这没关系,不是吗?