Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

変数は初期化されてない可能性があります。のエラー

いつもお世話になってます。

Javaを先週から始めたばかりの初心者です。
専門学校で勉強してるのですが、Javaを早く習得したいのと、知っているウェブ関係の授業があり専門学校の授業より速いスピードで自習させてもらってて、どうしても質問がすぐにできなかったりします。ご協力いただければ幸いです。

下記のソースで、エラーが出ます。
秒を加算、減算するコードを書く前は動いたので、新しいincreaseとdecreaseのメソッドか、switch文が怪しいのですが、ご教授ください。
勉強したほうがいいサイトの項目なども教えていただければ助かります。
エラー
Ren10_02.java:57: 変数 second は初期化されていない可能性があります。
        int second = second + 1;
                             ^
Ren10_02.java:63: 変数 second は初期化されていない可能性があります。
        int second = second -1;
                             ^
エラー 2 個



import java.io.*;


class Mytime
{
    //フィールド
       
      private  int  hour;     
    private  int  minute;   
        private  int  second;
    
          

        
        public  void  setTime(int h, int m, int s)//void は戻り値がないので変更     //()内は渡された引数)       
       {
        
        
        if( h >= 12){              
            
            h = 12 ;      
        }
        
                else{                            
        h = h ;
        }
        
        if( m >= 60){              
            
            m =590 ;      
        }
        
                else{                            
        m = m ;
        }
        if( s >= 60){              
            
            s = 59 ;      
        }
        
                else{                            
        s = s ;
        }
        hour = h; //順番あと
        minute = m;
        second = s;
       }
            
        public String getTime(){
        
        String time = (hour + ":" + minute + ":" + second);// 文字が入ってるのでString
        
        return(time); //return の()内の数が、メインメソッドへ渡される。変数を一つしかかけない。
         
       }
    public  void  increaseOneSecond(){ //()内は渡された引数)
        int second = second + 1;
    
    }
    
    
    public  void  decreaseOneSecond(){
        int second = second -1;
        
    }
 
                

                   
}






//「メイン」クラス
public class Ren10_02
{
     public static void main(String[] args)throws IOException
    {
         Mytime t = new Mytime();
         
         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         
             System.out.print("時を入力 > ");
        int h = Integer.parseInt( br.readLine() );
        System.out.print("分を入力 > ");
         int m = Integer.parseInt( br.readLine() );
            System.out.print("秒を入力 > ");
        int s = Integer.parseInt( br.readLine() );
        
    
    //    t.setTime(h,m,s); //timeも引き渡しがいるの?
        
    //    String a =
         t.setTime(h,m,s);//上記の、h,m,sの値を引き渡す。returnが引き渡したメソッド内に記述してあれば受け取るまでの動作
         

        
System.out.println(  t.getTime() + "に設定されました" );//returnがあるのでString型の値を受け取る
       //  Mytime.display();
       
       System.out.print("1秒進める(1)、戻す(2)、終了(他の数) > ");
        int l = Integer.parseInt( br.readLine() );

    
        switch( l ){
        case 1:
            t.increaseOneSecond();
            System.out.println(t.getTime());
            break;
        case 2:
            t.decreaseOneSecond();
            System.out.println(t.getTime());
            break;
        }

    }

}

9

回答

15375

閲覧

9件の回答

評価

0

エラーメッセージ
[変数 second は初期化されていない可能性があります。]
は無視ですか?

怪しいかどうかのアタリをつける際に
一番注視しなければいけないのはエラーメッセージ及び
例外のスタックトレースに何が表示されるかです。

今回の例の様に、そのものずばりのメッセージが表示される場合も
あるので変更した箇所が怪しいとの考えはまず脱却しましょう。

原因がわからない様であれば、エラーメッセージを参考に
「Java 変数 初期化」等で検索してみてください。

評価

0

こういうやり方で「解決」するのは、先に進んでるように
見えるだけで、その実何も身についていない。

評価

0

すいません。

フィールド変数secondは、settimeメソッド内で代入されてる理解でいたのですが違いますか?
settimeで代入した時間の秒(とりあえず分などの繰り上げはこれができてからします)に加算して、表示したいのです。
Switch文とincrease とdecreaseメソッドをコメントで消したら、コンパイルできます。

評価

0

解決しました。
フィールド変数の前に型を付けると宣言になるんですね。勉強不足でした。

評価

0

2013-07-08 18:13:47を回答したものです。

解決されてよかったです。
ソースのコメントアウト等で原因箇所を特定するのは
動かないものを何とか動かすのには有効ですが、
根本原因の理解にはつながりにくいです。

エラーメッセージで理解できない単語等があれば
それを調べるようにして、エラーメッセージの意味を
理解できるようになることが、習得の近道かと思います。

がんばってください。

評価

0

そもそも、変数は型ありき。つまり宣言ありき。
型を明示しない言語もあるが、少なくともJavaでは必須。

JSPには暗黙の変数があったりもするが、これとて自分が
見ないで良いところで宣言しているに過ぎない。

評価

0

まず
public void decreaseOneSecond() {
     int second = second - 1;
}
では呼び出される度にsecondが新しい型を作成させられ、secondに値が
何も入っていない状態です。
(無) - 1 ではおかしいだろってエラーを出しているのです。

また気になったのですが、
  else{                            
        h = h ;
        }

ってこの処理無意味ですよね。
余計な処理をさせてしまわないようにした方がいいです。

評価

0

elseは必ずなきゃいけないという感覚に囚われる人は、
実は結構多い。
elseに全く意識が行かない人よりはマシだなあ。

h = hくらいだと、コンパイル時に消えるんじゃないかな。
試してないけど。

とは言え、ソースはなるべくシンプルに、理解しやすく書く
べきなので、書かない方が良いのは当然。

評価

0

皆さんありがとうございます。
elseに関しては、仰る通り、書かないといけないと思って書いてましたw
皆様のお蔭ですこしずつではありますが、学習しているの感じてます。
これからもよろしくお願いします!

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。