Метод Java не работает - PullRequest
1 голос
/ 22 марта 2011

Следующий метод должен создать две случайные строковые переменные и вывести их.На данный момент они должны быть идентичны.

public static void main(String[] args){
    ScalesSolution s1 = new ScalesSolution(10);
    s1.println();
    ScalesSolution s2 = new ScalesSolution(s1.getSol());
    s2.println();
}

Класс ScalesSolution:

import java.util.*;

public class ScalesSolution
{
private 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();
    //Code goes here
    //Create a random binary string of just ones and zeros of length n

    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 double ScalesFitness(ArrayList<Double> weights)
{
    if (scasol.length() > weights.size()) return(-1);
    double lhs = 0.0,rhs = 0.0;
    int n = scasol.length();

    //Code goes here
    //Check each element of scasol for a 0 (lhs) and 1 (rhs) add the weight wi
    //to variables lhs and rhs as appropriate

    return(Math.abs(lhs-rhs));
}

public void smallChange(int n)
{
    Random rand = new Random();
    int p = (rand.nextInt(n) - 1);

//      Checks if p < 0.  If so, then p will not have 1 subtracted from it.
    if(p < 0){
        p = (rand.nextInt(n));
    }

    String x = new String();

    x = scasol.substring(0, p);
        if (scasol.charAt(p) == '0')
            scasol.replace('0', '1');
        else if (scasol.charAt(p) == '1')
            scasol.replace('1', '0');
            scasol = x;
}//End smallChange()

public String getSol(){

    return(scasol);

}//End getSol()

//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();
}


}

Вывод пустой - что я делаю не так?

Спасибо.

Ответы [ 3 ]

5 голосов
/ 22 марта 2011

Вам нужно написать часть, которая упоминается здесь

String s = new String();
//Code goes here
//Create a random binary string of just ones and zeros of length n

return(s);
4 голосов
/ 22 марта 2011

Прямо сейчас ваш код RandomBinaryString состоит из новой строки и комментария:

private static String RandomBinaryString(int n)
{
    String s = new String();
    //Code goes here
    //Create a random binary string of just ones and zeros of length n

    return(s);
}

Это означает, что вы всегда будете возвращать пустую строку при вызове RandomBinaryString.Когда «код идет сюда», вещи, скорее всего, будут работать лучше.:)

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

Ну, то, что напечатано, зависит от определения scasol. Из приведенного выше кода scasol будет содержать возвращаемое значение RandomBinaryString (), которое, как показано, всегда возвращает пустую строку. Есть комментарий, в котором говорится, что здесь идет больше кода - возможно, этот код еще не существует?

Можете ли вы объяснить, что вы ожидали напечатать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...