我一直在尝试获取列表的子列表,将其反转,然后将反转的列表放回起始位置。例如,假设我们拥有列表[1, 2, 3, 4, 5, 6],然后从索引2反转到索引4将得到[1, 2, 5, 4, 3, 6]。
我为此编写了一些代码,但是ConcurrentModificationException每次都给出一个代码(除非startIndex == endIndex)。下面提供了一个最小的可重现示例:
int startIndex = 2;
int endIndex = 4;
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
List<Integer> toReverse = list.subList(startIndex, endIndex+1);
Collections.reverse(toReverse);
list.removeAll(toReverse);
list.addAll(startIndex, toReverse);
Run Code Online (Sandbox Code Playgroud)
异常线程“main” java.util.ConcurrentModificationException
在java.util.ArrayList中的$ SubList.checkForComodification(来源不明)
在java.util.ArrayList的$ SubList.size(来源不明)在
java.util.AbstractCollection.toArray(来源不明)在 test.ConcurrentExample.main(ConcurrentExample.java:64)处
java.util.ArrayList.addAll(Unknown Source
)
错误所指的实际行是list.addAll(startIndex, toReverse);。
我不确定是什么问题,因为迭代过程中似乎没有任何变化。如果有人能解释为什么会这样和/或如何解决它,将不胜感激。
在这段代码中,它是创建抽象类或匿名类的对象吗?请告诉我.我在这里有点困惑.
public abstract class AbstractDemo {
abstract void showMessage();
abstract int add(int x,int y);
public int mul(int x,int y){
return x+y;
}
public static void main(String[] args) {
AbstractDemo ad = new AbstractDemo() {
@Override
void showMessage() {
// TODO Auto-generated method stub
}
@Override
int add(int x, int y) {
// TODO Auto-generated method stub
return 0;
}
};
System.out.println(ad.mul(10, 12));
System.out.println(ad.getClass());
}
}
Run Code Online (Sandbox Code Playgroud) 我正在按照Oracle的教程在 JavaFX 中创建 TableView。在这个屏幕截图中,我复制并粘贴了代码,但出现了几个错误,教程中没有提到这些错误。
TableView 上的警告说:
TableView 是一种原始类型。对泛型类型 TableView<?S> 的引用应该被参数化
TableColumn 上的警告说:
TableColumn 是原始类型。对泛型类型 TableColumn<?S,T> 的引用应该被参数化
addAll 方法上的警告说:
类型安全:addAll(Object...) 方法属于原始类型 ObservableList。对泛型类型 ObservableList<?E> 的引用应该被参数化
我查看了文档,发现它们确实需要参数(这很令人困惑,因为教程没有提到这一点),但我不明白它们应该是什么。如果我做
TableView<String> table = new TableView<>();
Run Code Online (Sandbox Code Playgroud)
和
TableColumn<String, String> tableCol = new TableColumn<>(...);
Run Code Online (Sandbox Code Playgroud)
我仍然收到关于 addAll 方法的警告,其中说:
类型安全:为可变参数创建一个 TableColumn<?String,?> 的通用数组
我真的无法理解类型参数的期望值。我知道我可以抑制警告,但这似乎是不好的做法。我该怎么办?
我正在学习使用 Python DEAP 模块,并且创建了一个最小化适应度函数和一个评估函数。我用于健身功能的代码如下:
ct.create("FitnessFunc", base.Fitness, weights=(-0.0001, -100000.0))
Run Code Online (Sandbox Code Playgroud)
请注意重量差异非常大。这是因为Fitness 的 DEAP 文档说:
权重还可用于改变每个目标相对于另一个目标的重要性。这意味着权重可以是任何实数,并且仅使用符号来确定是否进行最大化或最小化。
对我来说,这意味着你可以通过增大一个权重来优先考虑另一个权重。
我正在使用algorithms.eaSimple(通过名人堂)来进化,并且使用 来选择群体中最好的个体tools.selTournament。
评估函数返回abs(sum(input)), len(input)。运行后,我从 HallOfFame 中获取值并对其进行评估,但是,输出类似于以下内容(行尾的数字是我添加的):
(154.2830144, 3) 1
(365.6353634, 4) 2
(390.50576340000003, 3) 3
(390.50576340000003, 14) 4
(417.37616340000005, 4) 5
Run Code Online (Sandbox Code Playgroud)
让我困惑的是,我认为文档指出较大的第二个权重意味着len(input)会产生更大的影响,并会产生如下输出:
(154.2830144, 3) 1
(365.6353634, 4) 2
(390.50576340000003, 3) 3
(417.37616340000005, 4) 5
(390.50576340000003, 14) 4
Run Code Online (Sandbox Code Playgroud)
请注意,第 4 行和第 5 行交换了位置。这是因为第 4 行的权重比第 5 行的权重大得多。
看来,适应度实际上是首先根据第一个元素进行评估的,然后仅当第一个元素之间存在平局时才考虑第二个元素。如果是这样的话,那么设置除-1或+1以外的权重的目的是什么?
我从这个问题中学到了可以", ".join(var)在Python 中使用数组连接值.此代码适用于字符串,例如:
var = ["hello","world"]
print (", ".join(var))
Run Code Online (Sandbox Code Playgroud)
给出hello, world我想要的输出.
但是,当我在数组中使用数字时:
var = [1,2,3]
print (", ".join(var))
Run Code Online (Sandbox Code Playgroud)
它给出了一条错误消息:
Traceback (most recent call last):
File "C:\path\test.py", line 2, in <module>
print (", ".join(var))
TypeError: sequence item 0: expected str instance, int found
Run Code Online (Sandbox Code Playgroud)
然而,我希望输出为:
1, 2, 3
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以这样,它将打印所有数字,还有能力增加,所以我可以有任何数量的数字?