Java 如何使在循环内部创建的数组在循环外部工作?

Java 如何使在循环内部创建的数组在循环外部工作?,java,Java,我正在做一个java项目来测试不同的排序算法,需要使用不同类型的向量 我在代码中确定向量的类型,所以我需要在循环中声明它。由于数组的作用域,这将生成错误。是否有类似的方法或解决此错误 我在eclipse 2020上,下面是生成错误的代码: if(TypeOfVector(desorganized) == -1) { int[] organizedVector = PassingToIntVector(desorganized);} if(TypeOfVector(desorganized

我正在做一个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 ++;
}
if(载体类型(脱组织)=-1){
int[]有组织向量=传递点向量(无组织);}
if(载体类型(脱有机)==0){
float[]organizedVector=PassingToFloat向量(脱组织);}
if(载体类型(脱有机)==1){
double[]organizedVector=PassingToubleVector(脱有机);}
int=0;
int duo;
int n=脱组织的.size();
while(有组织的!=n-1){
有组织=0;
对于(duo=0;duoorganizedVector[duo+1]){
organizedVector[duo]=organizedVector[duo]-organizedVector[duo+1];
有组织向量[duo+1]=有组织向量[duo+1]+有组织向量[duo];
organizedVector[duo]=organizedVector[duo+1]-organizedVector[duo];
}
else++;
}
下面是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;
public float[]PassingToFloatVector(数组列表){
Object[]数组=list.toArray();
float[]解构=新的float[list.size()];
对于(int i=0;i
您要问的第一个问题是范围。您需要用范围声明变量才能继续

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语句将失败。考虑粘贴一个<代码>列表>代码>代码> >列表<代码> >代码>列表<代码> >所有代码>代码>您可以在发布之前格式化您的代码吗?它不像您尝试动态创建VoTreCordDo以适应几种类型(int,浮动,double)一样好。在多个if分支中不允许这样做,因为无法保证其中一个分支是创建的。搜索“java variables scope”以获取进一步的说明每个
{…}
是一个块,并且在该块中声明的变量在其外部不可见。因此会出现错误。如果移动
double[]VetororOrganizado
在第一个
if
之前,它可以工作(我没有尝试,因为您没有提供),但您将把所有内容都视为双倍,这可能是您想要的,也可能不是您想要的。您可以使用类似
List
的集合,然后使用
Collections.sort(…)
。您可以在使用数组创建数组后直接对数组进行排序。sort()当然,这取决于以后如何处理数组(如果有帮助)。如果需要一个变量,可以是float[]、int[]或double[]您可以将其声明为对象,但无论何时您想要访问或使用它,都必须将其转换回正确的数组类型。他将无法与进行比较List@GreyFairer啊,我明白了。我以为数字也是可比的,但整数是一个数字和一个可比的。是的,我做了一个比较对象的函数,我正在使用它调整算法