質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • Java

    13524questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    6419questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

テキストファイルから読み込んだ数値を二次配列に保存するには

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,724

naia

score 21

Javaでテキストファイルから数値を取り込んで順番に二次配列に保存するにはどうしたらいいでしょうか
テキストファイルの中身
9
0
9
55
10
0
10
55
11
0
12
0
12
40
13
40
13
45
14
45
14
50
16
0

int hairetu[][] = {
            { 0, 0 }, { 0, 0 },
            { 0, 0 }, { 0, 0 },
            { 0, 0 }, { 0, 0 },
            { 0, 0 }, { 0, 0 },
            { 0, 0 }, { 0, 0 },
            { 0, 0 }, { 0, 0 }
        };


【2月11日13:33更新】
以下のプログラムは指定された時間になると音を鳴らすというものです
テキストを読み込みkizyunZikokuを設定できるように変えたいのですが、教えて頂いたコードを追加しても上手くいきませんでした
どう修正すれば上手くいくでしょうか?

import java.applet.AudioClip;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;


public class Javatokei extends Applet 





    implements
    Runnable
{
    static final int DIM = 2; // DIM 要素の配列 を 1 つの要素にする
    

    // 基準時刻
    int kizyunZikoku[][] = {
        { 9, 0 }, { 9, 55 },
        { 10, 0 }, { 10, 55 },
        { 11, 0 }, { 12, 0 },
        { 12, 40 }, { 13, 40 },
        { 13, 45 }, { 14, 45 },
        { 14, 50 }, { 16, 0 }
    };
    
    
        static int h;
        static int m;
        static int s;
        
        

        // デフォルトフレームサイズ
        private int width = 640;
        private int height = 480;
        
        
        int A = 640;
        int B = 0;
        int C = 0;
        int D = 0;
        int E = 0;
        int X1 = 0;
        int X2 = 640;
        int Y1 = 150;
        int Y2 = 250;
        int mm;
        


        
          int kizyunZikokuNoKazu = 17;
          
        boolean a = true;
        boolean saisyoNoFureemuDeAru = true;
        int maeNiOtoWoNarasitaZikantai = -1;
        int zenntai = 7 * 60;
        int F;
        
        //全体を表すゲージ
        int NowJikann = zenntai; //現在の残り時間
        int Width = 480;
        double G;
        
        //時刻の設定
        int hazimariNoZikoku = 60 * ( 60 * 9 + 0 ) + 0;
        int owariNoZikoku = hazimariNoZikoku + 60 * zenntai;
        
        

        
      //時間に合わせてメッセージが変わる
          String messages[] = {
             "",
             " ",
             " ",
             " ",
             " ",
             " ", // 5
             " ",
             " ",
             "おはようござます",
             "おはようございます",
             "今日も一日頑張りましょう!", // 10
             "もうすぐお昼休みだ!",
             "休憩時間です!",
             "午後も頑張りましょう",
             "こんにちは",
             "残り1時間をきりました", // 15
             "お疲れ様でした",
             "お疲れ様でした"
         };
        
          
          
          
          
         static Image OffBuf;
         
    Thread th = null;
    int delay = 100;

    public void init() {



    }

    public void paint(Graphics g) {
        OffBuf = createImage(640, 480);
        Graphics OffG;//グラフィックス型変数を宣言
        OffG = OffBuf.getGraphics();
        
        OffG.clearRect(0,0,getSize().width,getSize().height); //オフスクリーンの初期化
        /////////////////////////////////////////////////////
        //全体のゲージが徐々に減っていく
         // 棒グラフのパラメータを設定する
        OffG.setColor( Color.GREEN );
        OffG.fillRect( 0, 420, 640, 480 );
        G = ( zenntai -  F ) *  width / zenntai;
        OffG.setColor( Color.PINK );
        OffG.fillRect( 0, 420,  (int)G,  640 );
        //デバッグ用 変数G
        OffG.drawString("デバッグ用"+ G +"" , 60, 80 );//邨碁℃譎る俣
                
////////////////////////////////////////////////////
        
        //ゲージ
        OffG.setColor( Color.GREEN );
        OffG.fillRoundRect(0, 100, 640, 71, 5, 10);
        int geeziNoKawarime = X1 + (X2 - X1)*(C - B) / (A - B);
        OffG.setColor( Color.PINK );
        OffG.fillRoundRect(0, 100, geeziNoKawarime, 71, 5, 10);
        OffG.setColor( Color.PINK );
        Font font = new Font("TimesRoman",Font.ITALIC,42);
        OffG.setFont( font );
        OffG.drawString( "経過時間", 25, 300 );
        OffG.drawString("" + m +"分", 70, 250 );//邨碁℃譎る俣
        OffG.setColor( Color.BLACK );
        OffG.drawString( "/全体の時間/",200, 300 );
        OffG.drawString( "" + E + "分", 350, 250 );
        OffG.setColor( Color.GREEN );
        D += 1;
        OffG.drawString( "残り時間",450, 300 );
        OffG.drawString("" + D +"分", 500, 250 );//残り時間
        OffG.setColor( Color.BLACK );
        
        // 午前 午後
        int jikann;
        int gogo;
        
        if ( h >= 13){
            jikann = h - 12;
            gogo = 1;
        }
        else{
            jikann = h;
            gogo = 0;
        }
        
        
        if( gogo == 1){
        OffG.drawString( "午後"+jikann+"時"+mm+"分", 300,350 );
        }else{
        OffG.drawString( "午前"+h+"時"+mm+"分", 300,350 );
        }
        OffG.setColor( Color.BLACK );
        OffG.drawString( "全体の残り時間"+F+"分", 100,400 );
        
        
        //メッセージ
        if (1 <= h && h <= 17) {
                OffG.drawString(messages[h], 0, 30);
        }
        g.drawImage(OffBuf, 0, 0, this);
        
        
                //時間を取得する
              Calendar now = Calendar.getInstance(); 
              h = now.get(now.HOUR_OF_DAY); //時
              m = now.get(now.MINUTE);      //分
              s= now.get(now.SECOND);       //秒
              mm=now.get(now.MINUTE);        //時間表示用
              
              //
              


                

                
                
                // その基準時刻と次の基準時刻の間でゲージを動かすか
                boolean zikanWoHyouziSuru[] = {
                    true, true,
                    true, true,
                    true, true,
                    true, true,
                    true, true,
                    true, true
                };

                // 今の時刻がどこに該当するかを計算する
                int imaNoZikoku = 60 * (60 * h + m) + s;//秒に変換
                int maeNoKizyunZikoku = 0;
                int tugiNoKizyunZikoku = 0;
                int imaNoZikantai = -1;
                for (int i = 0; i < 12; i++) {
                    int miteiruKizyunZikoku = 60 * (60 * kizyunZikoku[i][0] + kizyunZikoku[i][1]);
                    if (imaNoZikoku < miteiruKizyunZikoku) {
                        if (i > 0) {
                            imaNoZikantai = i - 1;
                            maeNoKizyunZikoku = 60 * (60 * kizyunZikoku[i - 1][0] + kizyunZikoku[i - 1][1]);
                            tugiNoKizyunZikoku = 60 * (60 * kizyunZikoku[i][0] + kizyunZikoku[i][1]);
                        }
                        break;
                    }
                }
                if (saisyoNoFureemuDeAru) {
                    maeNiOtoWoNarasitaZikantai = imaNoZikantai;
                    saisyoNoFureemuDeAru = false;
                }

                // 経過時間と残り時間を計算し。ゲージのパラメータを設定する
                if (imaNoZikantai >= 0 && zikanWoHyouziSuru[imaNoZikantai]) {
                    // 表示する時間
                    m = (imaNoZikoku - maeNoKizyunZikoku) / 60;
                    E = (tugiNoKizyunZikoku - maeNoKizyunZikoku) / 60;
                    D = (tugiNoKizyunZikoku - imaNoZikoku) / 60;
                    //ゲージのパラメータ
                    A = tugiNoKizyunZikoku;
                    B = maeNoKizyunZikoku;
                    C = imaNoZikoku;
                }
                else {
                    // 表示する時間
                    m = 99;
                    E = 99;
                    D = 99;
                    // ゲージのパラメータ
                    A = 640;
                    B = 0;
                    C = 0;
                }

                // 全体の残り時間を計算する
                if (imaNoZikoku < hazimariNoZikoku) {
                    // 始まっていない
                    F = 60 * zenntai;
                }
                else if (owariNoZikoku < imaNoZikoku) {
                    // 終わった後
                    F = 0;
                }
                else {
                    // 実行中
                    F = owariNoZikoku - imaNoZikoku;
                }
                // 棒グラフのパラメータを設定する
                G = F * Width / (60 * zenntai);
                // 谿九j譎る俣繧貞�縺ォ螟画鋤縺吶k
                F = (F + 59) / 60;

                // 情報が正しくなるように補正する
                if (imaNoZikoku % 60 == 0) D--;


        

        
        if (maeNiOtoWoNarasitaZikantai != imaNoZikantai) {
            maeNiOtoWoNarasitaZikantai = imaNoZikantai;
            if (imaNoZikantai >= 0) {
                //音を鳴らす
                PutSound();
                }
        }
        

        
        

    }

    public void update(Graphics g) {
        paint(g);
    }

    public void start() {
        th = new Thread(this);
        th.start();
    }

    public void stop() {
        th = null;
    }

    public void run() {
        Thread me = Thread.currentThread();
        while (th == me) {
            try{
                Thread.currentThread().sleep(delay);
            }catch (InterruptedException e) {
            }
            repaint();
        }
    }
    
    public static void PutSound(){
        AudioClip ac = null;
        ac = java.applet.Applet.newAudioClip(Javatokei.class.getResource("test.wav"));
        // XXXXX はクラス名。Minipro.java の場合は Minipro。
        ac.play();
          /* 500ミリ秒待機する */
          try{
            Thread.sleep(12000);
          }catch (InterruptedException e){
          }
}
    public static int[][] loadIntArray(final String filename, final int dim) throws IOException {
        List<int[]> nums = new ArrayList<int[]>();

        //Files クラスを使用してファイルを行単位に読み込む。
        List<String> line = Files.readAllLines(Paths.get(filename), Charset.forName("UTF-8"));

        int pos = 0;
        int[] vals = new int[dim];
        for (String s : line) {
            vals[pos % dim] = Integer.parseInt(s);
            pos++;
            if (pos % dim == 0) {
                nums.add(vals);
                vals = new int[dim];
            }
        }
        if (pos % dim != 0) {
            nums.add(vals);
        }
        return (int[][]) nums.toArray(new int[0][dim]);
    }
    
 
}
 }
}
コード
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

0

配列は二次元ですが、ファイルは一次元なんですね?
こんな感じでしょうか。テストしてませんが。
public static int[][] loadIntArray(String path) throws IOException {
    List<int[]> ret = new ArrayList<String>();
    try {
        FileInputStream stream = new FileInputStream(path);
        BufferedReader reader = new BufferedReader(new InputStreamReader(stream,"UTF-8"));
        int count = 0;
        int[] array = null;
        for ( String line = rd.readLine(); line != null; line = rd.readLine() ) {
            int num = Integer.parseInt(line);
            if ( count % 1 == 0 ) {
                array = new int[2];
                array[0] = num;
            } else {
                array[1] = num;
                ret.add(array);
            }
            count++;
        }
        reader.close();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return ret.toArray(new int[0]);
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

書いてみました。
/*
    See https://teratail.com/questions/6355
*/
package sample;

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Sample {

    static final int DIM = 2; // DIM 要素の配列 を 1 つの要素にする。

    public static void main(String[] args) {
        try {
            final int[][] ary = loadIntArray("data.txt", DIM);
            for (int[] n : ary) {
                System.out.println(Arrays.toString(n));
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public static int[][] loadIntArray(final String filename, final int dim) throws IOException {
        List<int[]> nums = new ArrayList<int[]>();

        //Files クラスを使用してファイルを行単位に読み込む。
        List<String> line = Files.readAllLines(Paths.get(filename), Charset.forName("UTF-8"));

        int pos = 0;
        int[] vals = new int[dim];
        for (String s : line) {
            vals[pos % dim] = Integer.parseInt(s);
            pos++;
            if (pos % dim == 0) {
                nums.add(vals);
                vals = new int[dim];
            }
        }
        if (pos % dim != 0) {
            nums.add(vals);
        }
        return (int[][]) nums.toArray(new int[0][dim]);
    }
}
// data.txt の内容
// 1
// 2
// 10
// 11
// 12
//
// 実行結果
// [1, 2]
// [10, 11]
// [12, 0]


投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/09 11:59

    単体では動きました…が、組み込むとエラーが出てしまいます

    キャンセル

  • 2015/02/09 12:45

    エラー内容と、読み込ませているテキストファイルの内容を教えていただけると、解決方法がわかるかもしれません。

    キャンセル

  • 2015/02/09 13:25

    初歩的な質問ですみませんが、hairetuにあたる部分のコードはどこでしょうか

    キャンセル

  • 2015/02/09 22:16

    > ... hairetuにあたる部分のコード ...
       final int[][] ary = loadIntArray("data.txt", DIM);
    で、 ary に 2 次元配列が設定されます。
    oadIntArray()  中では
      (int[][]) nums.toArray(new int[0][dim]);
    で 2次元配列を返しています。

    キャンセル

  • 2015/02/11 13:09

    import java.applet.Applet;
    import java.applet.AudioClip;
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.io.IOException;
    import java.nio.charset.Charset;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Calendar;
    import java.util.List;


    public class Javatokei extends Applet





    implements
    Runnable
    {
    static final int DIM = 2; // DIM 要素の配列 を 1 つの要素にする





    static int h;
    static int m;
    static int s;



    // デフォルトフレームサイズ
    private int width = 640;
    private int height = 480;


    int A = 640;
    int B = 0;
    int C = 0;
    int D = 0;
    int E = 0;
    int X1 = 0;
    int X2 = 640;
    int Y1 = 150;
    int Y2 = 250;
    int mm;




    int kizyunZikokuNoKazu = 17;

    boolean a = true;
    boolean saisyoNoFureemuDeAru = true;
    int maeNiOtoWoNarasitaZikantai = -1;
    int zenntai = 7 * 60;
    int F;

    //全体を表すゲージ
    int NowJikann = zenntai; //現在の残り時間
    int Width = 480;
    double G;

    //時刻の設定
    int hazimariNoZikoku = 60 * ( 60 * 9 + 0 ) + 0;
    int owariNoZikoku = hazimariNoZikoku + 60 * zenntai;




    //時間に合わせてメッセージが変わる
    String messages[] = {
    "",
    " ",
    " ",
    " ",
    " ",
    " ", // 5
    " ",
    " ",
    "おはようござます",
    "おはようございます",
    "今日も一日頑張りましょう!", // 10
    "もうすぐお昼休みだ!",
    "休憩時間です!",
    "午後も頑張りましょう",
    "こんにちは",
    "残り1時間をきりました", // 15
    "お疲れ様でした",
    "お疲れ様でした"
    };





    static Image OffBuf;

    Thread th = null;
    int delay = 100;

    public void init() {



    }

    public void paint(Graphics g) {
    OffBuf = createImage(640, 480);
    Graphics OffG;//グラフィックス型変数を宣言
    OffG = OffBuf.getGraphics();

    OffG.clearRect(0,0,getSize().width,getSize().height); //オフスクリーンの初期化
    /////////////////////////////////////////////////////
    //全体のゲージが徐々に減っていく
    // 棒グラフのパラメータを設定する
    OffG.setColor( Color.GREEN );
    OffG.fillRect( 0, 420, 640, 480 );
    G = ( zenntai - F ) * width / zenntai;
    OffG.setColor( Color.PINK );
    OffG.fillRect( 0, 420, (int)G, 640 );
    //デバッグ用 変数G
    OffG.drawString("デバッグ用"+ G +"" , 60, 80 );//邨碁℃譎る俣

    ////////////////////////////////////////////////////

    //ゲージ
    OffG.setColor( Color.GREEN );
    OffG.fillRoundRect(0, 100, 640, 71, 5, 10);
    int geeziNoKawarime = X1 + (X2 - X1)*(C - B) / (A - B);
    OffG.setColor( Color.PINK );
    OffG.fillRoundRect(0, 100, geeziNoKawarime, 71, 5, 10);
    OffG.setColor( Color.PINK );
    Font font = new Font("TimesRoman",Font.ITALIC,42);
    OffG.setFont( font );
    OffG.drawString( "経過時間", 25, 300 );
    OffG.drawString("" + m +"分", 70, 250 );//邨碁℃譎る俣
    OffG.setColor( Color.BLACK );
    OffG.drawString( "/全体の時間/",200, 300 );
    OffG.drawString( "" + E + "分", 350, 250 );
    OffG.setColor( Color.GREEN );
    D += 1;
    OffG.drawString( "残り時間",450, 300 );
    OffG.drawString("" + D +"分", 500, 250 );//残り時間
    OffG.setColor( Color.BLACK );

    // 午前 午後
    int jikann;
    int gogo;

    if ( h >= 13){
    jikann = h - 12;
    gogo = 1;
    }
    else{
    jikann = h;
    gogo = 0;
    }


    if( gogo == 1){
    OffG.drawString( "午後"+jikann+"時"+mm+"分", 300,350 );
    }else{
    OffG.drawString( "午前"+h+"時"+mm+"分", 300,350 );
    }
    OffG.setColor( Color.BLACK );
    OffG.drawString( "全体の残り時間"+F+"分", 100,400 );


    //メッセージ
    if (1 <= h && h <= 17) {
    OffG.drawString(messages[h], 0, 30);
    }
    g.drawImage(OffBuf, 0, 0, this);


    //時間を取得する
    Calendar now = Calendar.getInstance();
    h = now.getInstance().get(now.HOUR_OF_DAY); //譎ゅr莉」蜈・
    m = now.getInstance().get(now.MINUTE); //蛻�繧剃サ」蜈・
    s= now.getInstance().get(now.SECOND); //遘偵r莉」蜈・
    mm=now.getInstance().get(now.MINUTE); //時間表示用


    //ここから
    try {
    int[][] kizyunZikoku = loadIntArray("data.txt", DIM);
    for (int[] n : kizyunZikoku) {
    System.out.println(Arrays.toString(n));
    }
    } catch (IOException ex) {
    ex.printStackTrace();
    }
    //ここまで



    // その基準時刻と次の基準時刻の間でゲージを動かすか
    boolean zikanWoHyouziSuru[] = {
    true, true,
    true, true,
    true, true,
    true, true,
    true, true,
    true, true
    };

    // 今の時刻がどこに該当するかを計算する
    int imaNoZikoku = 60 * (60 * h + m) + s;//秒に変換
    int maeNoKizyunZikoku = 0;
    int tugiNoKizyunZikoku = 0;
    int imaNoZikantai = -1;
    for (int i = 0; i < 12; i++) {
    int miteiruKizyunZikoku = 60 * (60 * kizyunZikoku[i][0] + kizyunZikoku[i][1]);
    if (imaNoZikoku < miteiruKizyunZikoku) {
    if (i > 0) {
    imaNoZikantai = i - 1;
    maeNoKizyunZikoku = 60 * (60 * kizyunZikoku[i - 1][0] + kizyunZikoku[i - 1][1]);
    tugiNoKizyunZikoku = 60 * (60 * kizyunZikoku[i][0] + kizyunZikoku[i][1]);
    }
    break;
    }
    }
    if (saisyoNoFureemuDeAru) {
    maeNiOtoWoNarasitaZikantai = imaNoZikantai;
    saisyoNoFureemuDeAru = false;
    }

    // 経過時間と残り時間を計算し。ゲージのパラメータを設定する
    if (imaNoZikantai >= 0 && zikanWoHyouziSuru[imaNoZikantai]) {
    // 表示する時間
    m = (imaNoZikoku - maeNoKizyunZikoku) / 60;
    E = (tugiNoKizyunZikoku - maeNoKizyunZikoku) / 60;
    D = (tugiNoKizyunZikoku - imaNoZikoku) / 60;
    //ゲージのパラメータ
    A = tugiNoKizyunZikoku;
    B = maeNoKizyunZikoku;
    C = imaNoZikoku;
    }
    else {
    // 表示する時間
    m = 99;
    E = 99;
    D = 99;
    // ゲージのパラメータ
    A = 640;
    B = 0;
    C = 0;
    }

    // 全体の残り時間を計算する
    if (imaNoZikoku < hazimariNoZikoku) {
    // 始まっていない
    F = 60 * zenntai;
    }
    else if (owariNoZikoku < imaNoZikoku) {
    // 終わった後
    F = 0;
    }
    else {
    // 実行中
    F = owariNoZikoku - imaNoZikoku;
    }
    // 棒グラフのパラメータを設定する
    G = F * Width / (60 * zenntai);
    // 谿九j譎る俣繧貞�縺ォ螟画鋤縺吶k
    F = (F + 59) / 60;

    // 情報が正しくなるように補正する
    if (imaNoZikoku % 60 == 0) D--;





    if (maeNiOtoWoNarasitaZikantai != imaNoZikantai) {
    maeNiOtoWoNarasitaZikantai = imaNoZikantai;
    if (imaNoZikantai >= 0) {
    //音を鳴らす
    PutSound();
    }
    }





    }

    public void update(Graphics g) {
    paint(g);
    }

    public void start() {
    th = new Thread(this);
    th.start();
    }

    public void stop() {
    th = null;
    }

    public void run() {
    Thread me = Thread.currentThread();
    while (th == me) {
    try{
    Thread.currentThread().sleep(delay);
    }catch (InterruptedException e) {
    }
    repaint();
    }
    }

    public static void PutSound(){
    AudioClip ac = null;
    ac = java.applet.Applet.newAudioClip(Javatokei.class.getResource("test.wav"));
    // XXXXX はクラス名。Minipro.java の場合は Minipro。
    ac.play();
    /* 500ミリ秒待機する */
    try{
    Thread.sleep(12000);
    }catch (InterruptedException e){
    }
    }
    public static int[][] loadIntArray(final String filename, final int dim) throws IOException {
    List<int[]> nums = new ArrayList<int[]>();

    //Files クラスを使用してファイルを行単位に読み込む。
    List<String> line = Files.readAllLines(Paths.get(filename), Charset.forName("UTF-8"));

    int pos = 0;
    int[] vals = new int[dim];
    for (String s : line) {
    vals[pos % dim] = Integer.parseInt(s);
    pos++;
    if (pos % dim == 0) {
    nums.add(vals);
    vals = new int[dim];
    }
    }
    if (pos % dim != 0) {
    nums.add(vals);
    }
    return (int[][]) nums.toArray(new int[0][dim]);
    }


    }

    組み込んでみましたが、エラーが出てしまいました
    恐らくスコープの問題だと思いますが、どのようにすればkizyunZikoku(static?)に代入できますでしょうか?

    キャンセル

  • 2015/02/11 14:28

    具体的なエラー個所を記載し忘れていました
    申し訳ないです

    Runnable
    {
    static final int DIM = 2; // DIM 要素の配列 を 1 つの要素にする


    // 基準時刻
    int kizyunZikoku[][] = {
    { 9, 0 }, { 9, 55 },
    { 10, 0 }, { 10, 55 },
    { 11, 0 }, { 12, 0 },
    { 12, 40 }, { 13, 40 },
    { 13, 45 }, { 14, 45 },
    { 14, 50 }, { 16, 0 }
    };

    final int[][] ary = loadIntArray("data.txt", DIM);
        ↑この行です
    エラー内容は、デフォルト・コンストラクターは、暗黙的スーパー・コンストラクターによってスローされる例外型 IOException を処理できません。明示的コンストラクターを定義する必要があります

    よろしくお願いします

    キャンセル

0

AndroidのXMLで2次元配列を定義してソースから呼び出す
ファイルから読むのではなく、こちらのようにリソースに定義して読み込むといいのではないでしょうか
ファイルの読み取りに付き物の例外処理も不要ですし、管理も楽です。

以下、ちょっとコードで気になるところを指摘します。
MediaPlayer chime = MediaPlayer.create(getContext(), R.raw.test);
初期化子のように書いてますけど、多分これが無理です。
これをやるならコンストラクタでやるべきでしょうね
class SampleView extends View {
    MediaPlayer chime;
    //略
    public SampleView(Context context){
        super(context)
        chime = MediaPlayer.create(getContext(), R.raw.test);
    }
    //略
}
場合によっては、フィールド宣言で計算を使っているものもコンストラクタ内でやるべきかもしれません。
 //TODO: 時刻を取得する
      Calendar now = Calendar.getInstance(); 
      h = now.getInstance().get(now.HOUR_OF_DAY); //譎ゅr莉」蜈・
      m = now.getInstance().get(now.MINUTE);      //蛻?繧剃サ」蜈・
      s= now.getInstance().get(now.SECOND);       //遘偵r莉」蜈・
      mm=now.getInstance().get(now.MINUTE);        //時間表示用
各時間を取得するのにその都度getInstance()は不要だと思います。実行する度、違う時刻を返しますので。
get(int)も、フィールド値はstaticフィールドなので、get(Calendar.HOUR_OF_DAY)などが正しい書き方。
MINUTEフィールドを2回取ってるのも謎ですし。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/02/11 13:07

    コメントありがとうございます。
    後にアラームを鳴らす時間を変更する場合があるので、基準時刻を外部ファイルにしようと思い、このようなコードになりました
    他にどういう方法があるのか分からなかったため、実行するたびに時間を取得しています

    キャンセル

  • 2015/02/11 13:22

    Calendar now = Calendar.getInstance()で時刻は取得済みです。
    あとはnow.get(フィールド値)で時、分などを取得すればいいのです。
    nowとget()の間のgetInstance()が不要です。

    キャンセル

  • 2015/02/11 13:29

    修正しました
    ご指摘ありがとうございます

    キャンセル

  • 2015/02/11 13:35

    それと、何度も「エラーが出た」とおっしゃっていますが、エラーの内容を教えていただかないと、どこで何のエラーが出ているのかわからないので、答える側は示していただいたコードを全部読むはめになります。
    上の方がエラーの内容を教えるよう要求しても答えないのは、非常に質問者としてマナーが悪いと言わざるをえません。
    エラーの原因はエラーの内容に手がかりがあります。
    どのようなエラーが出ているかを教えてください。
    開発環境がどのようなものか存じませんが、eclipseなどであればLogCatに出ているはずです。

    キャンセル

0

ローカル変数からグローバル変数への代入で解決致しました
お騒がせしてすみませんでした

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    コードの改良余地について。

    下記にあるコードは 四角形を9個作り、点が存在する四角形を青で塗り潰すコードなんですが、 一応これで思った通りに実行されます。 ですが、オブジェクト指向ではないような気がします。

  • 解決済

    java 画像の表示

    コード import java.applet.Applet; import java.awt.*; public class sample extends Applet{    

  • 解決済

    アプレット パネル

    javaアプレットを勉強しています。 パネルを作って、そこに画像を張り付けて表示させたいと思っています。 ですが、実行しても表示されません。 パネルに画像を張り付けることはできない

  • 解決済

    ボタンに表示されるフォントを設定について

    JButtonにフォントを設定する場合、下ので出来ますが   JButton button = new JButton("ボタン");   button.setFont(new 

  • 解決済

    国旗を表示させるアプリケーションを作りたい

    前提・実現したいこと グローバル変数としてflagを宣言し、メソッドpublic void actionPerformed(ActionEvent e)において、どのボタンが押さ

  • 解決済

    きれいに描画する方法

    花びらが落ちていく、というようなプログラムを作っています。 コード public class Applet3D extends Applet implements Runna

  • 解決済

    GUI 図形の描画

    circle,fill,red,100,100,50,50 circle,fill,green,400,200,50,100 circle,draw,blue,250,250,

  • 受付中

    エラーの意味が分かりません

    import java.util.*; import java.awt.*; import java.awt.event.*; @SuppressWarnings("uncheck

同じタグがついた質問を見る

  • Java

    13524questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    6419questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。