因此程序需要执行以下操作:
替换以度数指定的角度列表中的元素,将其转换为等效的弧度,并且列表的大小保持不变。
这是我到目前为止所尝试的:
public static void toRadians(List<Double> t) {
for(int i = 0; i < t.size(); i++) {
Math.toRadians(t.get(i));
}
}
由于某种原因它无法正常工作,我几乎陷入了困境。
尝试这样做:
public static void toRadians(List<Double> t) {
for(int i = 0; i < t.size(); i++) {
t.set(i, Math.toRadians(t.get(i)));
}
}
当您使用List#get(int index)
来获得索引为List#get(int index)
的元素的值时。您必须使用i
的setter方法将值分配给索引为List#set(int index, E element)
的元素。
您可以使用List#set(int index, E element)
来完成使用i
的任务:
this explanation
使用Java 8+(但机制略有不同)执行此操作的极为简洁的方法是:
ListIterator
对于您的练习,毫无疑问,您将希望查看完成此任务和可变性的每种方式的时间复杂性,尤其是仅添加和删除列表中每个元素的时间复杂性。
您可以使用public static List<Double> convertToRadians(List<Double> t) {
for (final ListIterator<Double> iterator = t.listIterator(); iterator.hasNext(); ) {
final Double element = iterator.next();
iterator.set(Math.toRadians(element));
}
return t;
}
变换列表中的元素:
public static List<Double> convertToRadians(List<Double> t) {
t.replaceAll(Math::toRadians);
return t;
}
或者,如果您不想更改原始列表,则可以使用replaceAll
创建具有转换后的元素的新列表:
public static void toRadians(List<Double> degrees) {
degrees.replaceAll(Math::toRadians);
}