Ошибка оператора возврата - синтаксический анализ строки IP-адреса - PullRequest
0 голосов
/ 23 октября 2009

Может кто-нибудь сказать мне, почему мой последний оператор return не работает?

public class IpAddress
{
    private String dottedDecimal;
    private int[] Octet= new int[4];
    public int i;

    //Default constructor
    public IpAddress()
    {
        dottedDecimal = "0.0.0.0";
        for (i=0; i<=3; i++)
        {
            Octet[i] = 0;  //setting the array to zero
        }
    } // end default constructor

    //************************************
    //Specified constructor
    public IpAddress(String myAddress)
    {
        dottedDecimal = myAddress;
        String[] parsedOctets;
        parsedOctets = myAddress.split("\\Q.\\E"); // allows to stop at the dot
        for (i=0; i <=3; i++)
        {
            Octet[i] = Integer.parseInt(parsedOctets[i]); // breaking the string down to integers
        }
    }// end specified constructor

    //*****************************************************
    public String getDottedDecimal()
    {
        return dottedDecimal;
    }

    //*********************
    public int getOctet()
    {
        for (this.i=0; this.i <=3; this.i++)
        {
            return this.Octet[i];
        }
    }

} // end ip address class

Ответы [ 5 ]

4 голосов
/ 23 октября 2009

Мне кажется домашнее задание, но это явно не сработает:

public int getOctet()
{
    for (this.i=0; this.i <=3; this.i++)
    {
      return this.Octet[i];
    }

}

Возвращается из функции после первой итерации, вы не можете возвращаться из функции несколько раз.

3 голосов
/ 23 октября 2009

Я думаю, что вы хотите для этого последнего метода, это:

public int getOctet( int which )
{
    if ( which >= 0 && which <= 3 )
        return this.Octet[ which ];
    else
        return -1;  // error. Consider throwing an exception
}
0 голосов
/ 23 октября 2009

При названии вашего метода getOctect() кажется, что вы надеетесь вернуть массив, а не отдельный int из массива. В этом случае вы должны упростить его до чего-то вроде этого:

public int[] getOctet()
{
      return this.Octet;

}
0 голосов
/ 23 октября 2009

Если вы имеете в виду функцию 'get octet', она будет возвращать только Octet[0];

Оператор return останавливает выполнение функции при первом обращении к ней. То, что вы действительно хотите, это:

public int[] getOctet()
 {
          return this.Octet;
 }
0 голосов
/ 23 октября 2009

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

public int getOctet()
 {
     for (this.i=0; this.i <=3; this.i++)
        {
          return this.Octet[i];
        }

}

Это эквивалентно:

          return this.Octet[0];

Поскольку он запускается только один раз.

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