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