Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.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 在arrayList中只允许一个负数_Java_For Loop_Arraylist - Fatal编程技术网

Java 在arrayList中只允许一个负数

Java 在arrayList中只允许一个负数,java,for-loop,arraylist,Java,For Loop,Arraylist,我必须通读一个arrayList,如果除了-1(应该在列表中)之外还有任何负数,我就抛出一个异常。我知道如何查找负数,但我不知道如何在列表中允许-1 for(int i = 0; i <= list.size(); i++){ if(list.get(i) <= 0){ throw new IllegalArgumentException(); } } for(int i=0;i如果列表中不允许出现负值,请使用其他列表类型 比如说 class Non

我必须通读一个arrayList,如果除了-1(应该在列表中)之外还有任何负数,我就抛出一个异常。我知道如何查找负数,但我不知道如何在列表中允许-1

for(int i = 0; i <= list.size(); i++){
    if(list.get(i) <= 0){
        throw new IllegalArgumentException();
    }
}

for(int i=0;i如果列表中不允许出现负值,请使用其他列表类型

比如说

class NonNegativeList extends ArrayList<Integer> {

    @Override
    public boolean add(Integer x) {
        if (x < -1) throw IllegalArgumentException();
        super.add(x);
    }   
}
类非负列表扩展了ArrayList{
@凌驾
公共布尔加法(整数x){
如果(x<-1)抛出IllegalArgumentException();
增订(x);
}   
}
至于“在arrayList中只允许一个负数”,请添加一个布尔值

class NonNegativeList extends ArrayList<Integer> {

    boolean negativeAdded;

    @Override
    public boolean add(Integer x) {
        if (x < -1) throw IllegalArgumentException();
        if (negativeAdded) return;
        if (!negativeAdded && x < 0) {
            negativeAdded = true;
        }
        super.add(x);
    }   
}
类非负列表扩展了ArrayList{
布尔负首;
@凌驾
公共布尔加法(整数x){
如果(x<-1)抛出IllegalArgumentException();
如果(否定)返回;
如果(!negativeAdded&&x<0){
negativeaded=真;
}
增订(x);
}   
}

您的代码有几个问题。首先,您应该在
i
具有值
list.size()
之前停止循环(实际上,由于未使用元素的索引,因此可以使用,这是我在下面显示的。)其次,您需要测试您想要的条件,而不是每个元素都是
,为了允许一个唯一的负数,您可以继承ArrayList:

public class MyArrayList<T extends Number> extends ArrayList<T> {

    private boolean hasNegative = false;

    @Override
    public boolean add(T t) {
        if(t != null && t.floatValue() < 0) {
             if(hasNegative) {
                 throw new IllegalArgumentException("Negative element are not allowed anymore !");
             }
             hasNegative = true;
        }                 
        return super.add(t);
    }
}
公共类MyArrayList扩展了ArrayList{
私有布尔hasNegative=false;
@凌驾
公共布尔加法(T){
如果(t!=null&&t.floatValue()<0){
如果(负){
抛出新的IllegalArgumentException(“不再允许使用负元素!”);
}
hasNegative=true;
}                 
返回super.add(t);
}
}
要使用它:

List<Integer> lst = new MyArrayList<Integer>();
lst.add(1);
lst.add(-1);
lst.add(3);
lst.add(-4); // Throw IllegalArgumentException because there is already -1
List lst=new MyArrayList();
第1条增补(1);
第1条增加(-1);
第1条增补(3);
lst.add(-4);//抛出IllegalArgumentException,因为已经存在-1

if(list.get(i)<-1)应为enough@cricket_007:我的意思是。这不是一个计算问题,而是一个基础代数问题。只需更改
if(list.get(I)<-1){
还有
IOP的问题似乎是在作为参数传递的列表中筛选坏值。这是一种很好的定义列表的方法,该列表首先拒绝坏值,但似乎并没有解决OP的问题本身。(当然,OP可能会问一个问题。)此外,我没有看到“只有一个负值”引用OP的问题。这是从哪里来的?@TedHopp标题。@SotiriosDelimanolis-D'oh。我解释为列表中只允许一个负值(-1),而不是只允许一个负值的一个实例。(我和我妻子一直都有这个问题;如果有两种理解方式,我们总是会有不同的意见。)如果列表中有浮点值,这就不太好用。通过使用
intValue()
,像-0.5这样的条目将通过测试,因为
intValue()
将返回0.Thks,没错。我使用
doubleValue()
编辑的效果更好。当然,
floatValue()
也同样适用于此,因为
float
可以准确表示-1。
public class MyArrayList<T extends Number> extends ArrayList<T> {

    private boolean hasNegative = false;

    @Override
    public boolean add(T t) {
        if(t != null && t.floatValue() < 0) {
             if(hasNegative) {
                 throw new IllegalArgumentException("Negative element are not allowed anymore !");
             }
             hasNegative = true;
        }                 
        return super.add(t);
    }
}
List<Integer> lst = new MyArrayList<Integer>();
lst.add(1);
lst.add(-1);
lst.add(3);
lst.add(-4); // Throw IllegalArgumentException because there is already -1