java - 如何使在循环内创建的数组在其外部工作?
问题描述
我正在做一个 java 项目来测试不同的排序算法,并且需要使用不同类型的向量。
我在代码中确定了向量的类型,所以我需要在循环中声明它。由于数组的范围,这会产生错误。反正有没有做类似的事情或解决这个错误?
我在 eclipse 2020 上,这是生成错误的代码:
if(TypeOfVector(desorganized) == -1) {
int[] organizedVector = PassingToIntVector(desorganized);}
if(TypeOfVector(desorganized) == 0) {
float[] organizedVector = PassingToFloatVector(desorganized);}
if(TypeOfVector(desorganized) == 1) {
double[] organizedVector = PassingToDoubleVector(desorganized);}
int organized = 0;
int duo;
int n = desorganized.size();
while(organized != n-1) {
organized = 0;
for (duo = 0; duo < n - 1; duo ++) {
if(organizedVector[duo] > organizedVector[duo + 1]) {
organizedVector[duo] = organizedVector[duo] - organizedoVector[duo +1];
organizedVector[duo +1] = organizedVector[duo + 1] + organizedVector[duo];
organizedVector[duo] = organizedVector[duo + 1] - organizedVector[duo];
}
else organized ++;
}
这是 PassingTo 函数之一的示例:
public float[] PassingToFloatVector(ArrayList<Object> list) {
Object[] array = list.toArray();
float[] desorganized = new float[list.size()];
for(int i = 0; i < list.size(); i++) {
desorganized[i] = (float) array[i];
}
return desorganized;
解决方案
您要问的第一个问题是范围。您需要使用范围声明变量才能继续。
if(TypeOfVector(desorganized) == -1) {
int[] organizedVector = PassingToIntVector(desorganized);
}
if(TypeOfVector(desorganized) == 0) {
float[] organizedVector = PassingToFloatVector(desorganized);
}
这需要更改,因为您在 if 块中声明数组,一旦离开 if 块,它们就会丢失。即他们超出范围。
int[] organizedVector;
if(TypeOfVector(desorganized) == -1) {
organizedVector = PassingToIntVector(desorganized);
}
if(TypeOfVector(desorganized) == 0) {
organizedVector = PassingToFloatVector(desorganized);
}
这将放在organizedVector
更大的范围内,您可以在 if 语句之后使用它,但不能将其分配给 float[],因此第二个 if 语句将失败。考虑坚持使用List<Integer>
, List<Float>
,List<Double>
这些都是List<? extends Comparable>
.
然后您可以比较元素,并根据需要将它们与 collections.swap 交换。请注意,原始数组不可互换。您必须编写三个不同的代码块来处理三种不同的数组类型。
推荐阅读
- css - 奇怪的 chrome 和边缘 css:拖动时的悬停行为
- r - 为什么当我为 R 中的两个列表元素赋予相同的名称时没有错误
- python - 如何手动创建 SQLAlchemy 查询对象?
- c++ - 为什么允许编译器优化这个繁忙的等待循环?
- excel - 使用 ListObject 类型的属性无效
- php - PHP/Apache - Web 服务器不尊重 RewriteRule?
- python - 抑制工具帮助。需要知道如何不删除空行
- node.js - aws lambda 超时执行海王星查询
- java - Spring @RestControllerAdvice 和 @ExceptionHandler 防止在应用程序内部抛出异常
- python - 如果列值在超过 2 列中重复,则删除 pandas 中的行