Java ArrayList <Double>в качестве параметра - PullRequest
4 голосов
/ 14 марта 2011

В настоящее время я работаю в лаборатории и хотел бы узнать, как решить следующую проблему, на которую я потратил не менее двух часов:

Меня просят создать ArrayList, содержащий значения 1, 2, 3, 4 и 10. Хотя обычно у меня никогда не возникает проблем с созданием ArrayList с указанными значениями, на этот раз у меня возникают проблемы. Должен ли я создать ArrayList вне метода или внутри метода? Как бы я ни пытался это сделать, мне были представлены многочисленные сообщения об ошибках. Как добавить значения в этот параметр ArrayList? Я попытался добавить значения к нему при вызове из основного метода, но это все еще не работает. Вот метод, о котором идет речь.

public static double ScalesFitness(ArrayList<Double> weights){
    //code emitted for illustration purposes
}

Если бы кто-нибудь мог мне помочь, это было бы очень признательно. Если вам понадобится больше кода, пожалуйста, дайте мне знать.

Большое спасибо.

Мик.

РЕДАКТИРОВАТЬ: код для рассматриваемого класса выглядит следующим образом:

import java.util.*;

public class ScalesSolution
{
private static String scasol;
//Creates a new scales solution based on a string parameter
//The string parameter is checked to see if it contains all zeros and ones
//Otherwise the random binary string generator is used (n = length of parameter)
public ScalesSolution(String s)
{
    boolean ok = true;
    int n = s.length();
    for(int i=0;i<n;++i)
    {
        char si = s.charAt(i);
        if (si != '0' && si != '1') ok = false;
    }
    if (ok)
    {
        scasol = s;
    }
    else
    {
        scasol = RandomBinaryString(n);
    }
}
private static String RandomBinaryString(int n)
{
    String s = new String();

    for(int i = 0; i > s.length(); i++){
        CS2004.UI(0,1);
            if(i == 0){
                System.out.println(s + "0");
            }
            else if(i == 0){
                System.out.println(s + "1");
            }
    }

    return(s);
}
public ScalesSolution(int n) 
{
    scasol = RandomBinaryString(n); 
}
//This is the fitness function for the Scales problem
//This function returns -1 if the number of weights is less than
//the size of the current solution



public static double scalesFitness(ArrayList<Double> weights)
{   
    if (scasol.length() > weights.size()) return(-1);
    double lhs = 0.0,rhs = 0.0;

    double L = 0;
    double R = 0;

    for(int i = 0; i < scasol.length(); i++){
        if(lhs == 0){
            L = L + i;
        }
        else{
            R = R + i;
        }
    }

    int n = scasol.length();

    return(Math.abs(lhs-rhs));
}
//Display the string without a new line
public void print()
{
    System.out.print(scasol);
}
//Display the string with a new line
public void println()
{
    print();
    System.out.println();
}

}

Другой файл класса, который я использую (Lab7):

import java.util.ArrayList;

public class Lab7 {

public static void main(String args[])
{

    for(int i = 0 ; i < 10; ++i)
    {
        double x = CS2004.UI(-1, 1);
        System.out.println(x);
    }

    System.out.println();

    ScalesSolution s = new ScalesSolution("10101");
    s.println();

}

}

Ответы [ 4 ]

2 голосов
/ 14 марта 2011

вы можете эти

1) использовать varargs вместо списка

public static double scalesFitness(Double...weights)

, поэтому вы можете вызвать этот метод с помощью:

scalesFitness(1.0, 2.0, 3.0, 4.0, 10.0);

2) создать списоквне вашего метода

ArrayList<Double> weights = new ArrayList<Double>();
weights.add(1.0); 
weights.add(2.0); 
weights.add(3.0); 
weights.add(4.0); 
weights.add(10.0); 

scalesFitness(weights);
1 голос
/ 14 марта 2011

К вашей первоначальной публикации это будет работать:

scalesFitness (new ArrayList<Double> (Arrays.asList (new Double [] {1.0, 2.0, 4.0, 10.0})));

Вы можете явно перечислить значения в виде массива, но

  • Вы должны использовать 1,0 вместо 1, чтобы указать удваивается
  • вы должны поставить перед ним префикс new Double [], чтобы сделать массив, а массив не просто удваивается
  • Arrays.asList () создает форму List, но не ArrayList, а
  • к счастью, ArrayList принимает коллекцию в качестве начального параметра в своем конструкторе.

Итак, почти без шаблона, все готово. :)

Если вы можете переписать scalesFitness, это, конечно, будет немного проще. List<Double> как параметр уже является улучшением.

0 голосов
/ 01 июля 2018

Вам необходимо импортировать ArrayList в файл, содержащий ваши методы. Возможно, это решено, но с этой проблемой я столкнулся.

0 голосов
/ 14 марта 2011

Должен ли я создать ArrayList вне метода или внутри метода?

ArrayList - это параметр для метода, поэтому его необходимо создать вне метода перед вызовомметод.

...