-5

このプログラムを停止して戻ってテレビのオンとオフを切り替えるにはどうすればよいですか?

OFFを選択した場合、テレビの現在のステータスを表示したいと思います。

import java.util.Scanner;

public class TvTest
{
    public static void main (String[] args)
    {
        String x;
        String y;
        boolean tvStatus = false;
        int chan;
        int volu;

        Scanner input = new Scanner(System.in);
        TV tv2 = new TV(false,2,10);

        // Print out the current status of our TV
        System.out.print(tv2);
        System.out.println();

             System.out.print("Turn TV On or Off ?");
             x = input.nextLine();

             if(x.equalsIgnoreCase("on"))
               {
                   tvStatus = true;

               }else if(x.equalsIgnoreCase("off"))
               {
                   tvStatus =false;
               }

            System.out.print("Change the Channel to : ");
            chan = input.nextInt();

            System.out.print("Increase the volume by 1 or Decrease by -1 : ");
            volu = input.nextInt();

            TV tv1 = new TV(tvStatus,chan,volu);

            if(volu == 1)
            {
                tv1.incrementVolume();

            }else if (volu == -1)
            {
                tv1.decrementVolume();
            }

            System.out.println(tv1);


    }
}// ENd of TvTest

これが私のテレビクラスです。toStringメソッドまたは私のセッターを改善する方法があるはずだと思います

public class TV
{
    private boolean flag = false;
    private int ch;
    private int vol = 10;

    public TV(boolean onOffSwitch, int channel, int volume)
    {
        this.setFlag(onOffSwitch);
        this.setCh(channel);
        this.setVol(volume);
    }

    public void setFlag(boolean onOffSwitch)
    {
        if(onOffSwitch == true)
        {
            flag = true;
        }else
        {
            flag = false;
        }

    }// End of setFlag

    public boolean getFlag()
    {
        return flag;
    }// End of getFlag

    public void setCh (int newChannel)
    {
        if (newChannel >= 99)
        {
            ch = 99;
        }else
        {
            ch = newChannel;
        }

        if(newChannel < 0)
        {
            ch = 1;
        }
    }//end of setCh

    public int getCh ()
    {
        return ch;
    }// End of getCh

    public void setVol(int newVolume)
    {
        if(newVolume >= 20)
        {
            vol = 20;
        }

    }// End of SetVolume

    public void incrementVolume()
    {
        vol++;
    }

    public void decrementVolume()
    {
        vol--;
    }

    public int getVol()
    {
        return vol;
    }// ENd of getVolume

    public String toString()
    {
        if(flag == false)
        {
            return String.format("%s :%s\n%s:%d\n%s :%d","TV is switched","OFF","TV channel",ch,"TV volume",vol);
        }else
        {
            return String.format("%s :%s\n%s:%d\n%s :%d","TV is switched","ON","TV channel",ch,"TV volume",vol);
        }

    }

}// End of TV class
4

4 に答える 4

3

まず、これ:

public void setFlag(boolean onOffSwitch)
    {
        if(onOffSwitch == true)
        {
            flag = true;
        }else
        {
            flag = false;
        }

    }

する必要があります:

public void setFlag(boolean onOffSwitch)
    {
        flag = onOffSwitch;
    }

それで :

public void setCh (int newChannel)
    {
        if (newChannel >= 99)
        {
            ch = 99;
        }else
        {
            ch = newChannel;
        }

        if(newChannel < 0)
        {
            ch = 1;
        }
    }//end of setCh

する必要があります:

ch = (newChannel>=99) ? 99 : ((newChannel<0) ? 1 : newChannel);
于 2013-03-20T11:23:25.337 に答える
2
 public void setFlag(boolean onOffSwitch)
    {
        if(onOffSwitch == true)
        {
            flag = true;
        }else
        {
            flag = false;
        }

    }// End of setFlag

になり得る...

 public void setFlag(final boolean onOffSwitch)
        {
          flag = onOffSwitch;

        }// End of setFlag

第二に、あなたは同じ問題を抱えています...

if(x.equalsIgnoreCase("on"))
               {
                   tvStatus = true;

               }else if(x.equalsIgnoreCase("off"))
               {
                   tvStatus =false;
               }

になり得る...

tvStatus = x.equalsIgnoreCase("on");

finalBob Martin によるクリーンなコードで参照される一般的な方法として、メソッドのパラメーターを作成してください。

if (newChannel >= 99)
        {
            ch = 99;
        }else
        {
            ch = newChannel;
        }

になり得る...

ch = (newChannel>=99) ? 99 : newChannel;

ついに...

if(flag == false)

するだけできれいになります...

if(!flag)
于 2013-03-20T11:25:38.213 に答える
1

toString()メソッドの変更はほとんどありません。以下のコードスニペットを見つけてください。

 if(flag == false)
    {
        return String.format("%s :%s\n%s:%d\n%s :%d","TV is switched","OFF","TV channel",ch,"TV volume",vol);
    }else
    {
        return String.format("%s :%s\n%s:%d\n%s :%d","TV is switched","ON","TV channel",ch,"TV volume",vol);
    }

の代わりにフラグを直接確認できますflag==false

 if(!flag)
    {
        return String.format("%s :%s\n%s:%d\n%s :%d","TV is switched","OFF","TV channel",ch,"TV volume",vol);
    }else if(flag)
    {
        return String.format("%s :%s\n%s:%d\n%s :%d","TV is switched","ON","TV channel",ch,"TV volume",vol);
    }
于 2013-03-20T11:52:43.217 に答える
0

最初に、重複したリターンを削除する必要があります。

public String toString()
{
    String onOrOff = flag ? "ON" : "OFF";
    return String.format("%s :%s\n%s:%d\n%s :%d","TV is switched",onOrOff,"TV channel",ch,"TV volume",vol);
}

第二に、私は C スタイルの文字列形成が好きではありません。

public String toString()
{
    String onOrOff = flag ? "ON" : "OFF";
    String result = "TV is switched :" + onOrOff + '\n'
        + "TV channel:" + ch + '\n'
        + "TV volume :" + vol;
    return result;
}

3 番目に、Enum を定義できます。

enum Power { ON, OFF };
Power onOrOff = Power.ON;

public String toString()
{
    String result = "TV is switched :" + onOrOff + '\n'
        + "TV channel:" + ch + '\n'
        + "TV volume :" + vol;
    return result;
}
于 2013-03-20T18:24:55.330 に答える