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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

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

Android

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

Q&A

解決済

4回答

2967閲覧

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

naia

総合スコア20

Java

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

Android

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

0グッド

0クリップ

投稿2015/02/06 05:16

編集2015/02/11 04:33

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を設定できるように変えたいのですが、教えて頂いたコードを追加しても上手くいきませんでした
どう修正すれば上手くいくでしょうか?

lang

1import java.applet.AudioClip; 2import java.awt.Color; 3import java.awt.Font; 4import java.awt.Graphics; 5import java.awt.Image; 6import java.io.IOException; 7import java.nio.charset.Charset; 8import java.nio.file.Files; 9import java.nio.file.Paths; 10import java.util.ArrayList; 11import java.util.Calendar; 12import java.util.List; 13 14 15public class Javatokei extends Applet 16 17 18 19 20 21 implements 22 Runnable 23{ 24 static final int DIM = 2; // DIM 要素の配列 を 1 つの要素にする 25 26 27 // 基準時刻 28 int kizyunZikoku[][] = { 29 { 9, 0 }, { 9, 55 }, 30 { 10, 0 }, { 10, 55 }, 31 { 11, 0 }, { 12, 0 }, 32 { 12, 40 }, { 13, 40 }, 33 { 13, 45 }, { 14, 45 }, 34 { 14, 50 }, { 16, 0 } 35 }; 36 37 38 static int h; 39 static int m; 40 static int s; 41 42 43 44 // デフォルトフレームサイズ 45 private int width = 640; 46 private int height = 480; 47 48 49 int A = 640; 50 int B = 0; 51 int C = 0; 52 int D = 0; 53 int E = 0; 54 int X1 = 0; 55 int X2 = 640; 56 int Y1 = 150; 57 int Y2 = 250; 58 int mm; 59 60 61 62 63 int kizyunZikokuNoKazu = 17; 64 65 boolean a = true; 66 boolean saisyoNoFureemuDeAru = true; 67 int maeNiOtoWoNarasitaZikantai = -1; 68 int zenntai = 7 * 60; 69 int F; 70 71 //全体を表すゲージ 72 int NowJikann = zenntai; //現在の残り時間 73 int Width = 480; 74 double G; 75 76 //時刻の設定 77 int hazimariNoZikoku = 60 * ( 60 * 9 + 0 ) + 0; 78 int owariNoZikoku = hazimariNoZikoku + 60 * zenntai; 79 80 81 82 83 //時間に合わせてメッセージが変わる 84 String messages[] = { 85 "", 86 " ", 87 " ", 88 " ", 89 " ", 90 " ", // 5 91 " ", 92 " ", 93 "おはようござます", 94 "おはようございます", 95 "今日も一日頑張りましょう!", // 10 96 "もうすぐお昼休みだ!", 97 "休憩時間です!", 98 "午後も頑張りましょう", 99 "こんにちは", 100 "残り1時間をきりました", // 15 101 "お疲れ様でした", 102 "お疲れ様でした" 103 }; 104 105 106 107 108 109 static Image OffBuf; 110 111 Thread th = null; 112 int delay = 100; 113 114 public void init() { 115 116 117 118 } 119 120 public void paint(Graphics g) { 121 OffBuf = createImage(640, 480); 122 Graphics OffG;//グラフィックス型変数を宣言 123 OffG = OffBuf.getGraphics(); 124 125 OffG.clearRect(0,0,getSize().width,getSize().height); //オフスクリーンの初期化 126 ///////////////////////////////////////////////////// 127 //全体のゲージが徐々に減っていく 128 // 棒グラフのパラメータを設定する 129 OffG.setColor( Color.GREEN ); 130 OffG.fillRect( 0, 420, 640, 480 ); 131 G = ( zenntai - F ) * width / zenntai; 132 OffG.setColor( Color.PINK ); 133 OffG.fillRect( 0, 420, (int)G, 640 ); 134 //デバッグ用 変数G 135 OffG.drawString("デバッグ用"+ G +"" , 60, 80 );//邨碁℃譎る俣 136 137//////////////////////////////////////////////////// 138 139 //ゲージ 140 OffG.setColor( Color.GREEN ); 141 OffG.fillRoundRect(0, 100, 640, 71, 5, 10); 142 int geeziNoKawarime = X1 + (X2 - X1)*(C - B) / (A - B); 143 OffG.setColor( Color.PINK ); 144 OffG.fillRoundRect(0, 100, geeziNoKawarime, 71, 5, 10); 145 OffG.setColor( Color.PINK ); 146 Font font = new Font("TimesRoman",Font.ITALIC,42); 147 OffG.setFont( font ); 148 OffG.drawString( "経過時間", 25, 300 ); 149 OffG.drawString("" + m +"分", 70, 250 );//邨碁℃譎る俣 150 OffG.setColor( Color.BLACK ); 151 OffG.drawString( "/全体の時間/",200, 300 ); 152 OffG.drawString( "" + E + "分", 350, 250 ); 153 OffG.setColor( Color.GREEN ); 154 D += 1; 155 OffG.drawString( "残り時間",450, 300 ); 156 OffG.drawString("" + D +"分", 500, 250 );//残り時間 157 OffG.setColor( Color.BLACK ); 158 159 // 午前 午後 160 int jikann; 161 int gogo; 162 163 if ( h >= 13){ 164 jikann = h - 12; 165 gogo = 1; 166 } 167 else{ 168 jikann = h; 169 gogo = 0; 170 } 171 172 173 if( gogo == 1){ 174 OffG.drawString( "午後"+jikann+"時"+mm+"分", 300,350 ); 175 }else{ 176 OffG.drawString( "午前"+h+"時"+mm+"分", 300,350 ); 177 } 178 OffG.setColor( Color.BLACK ); 179 OffG.drawString( "全体の残り時間"+F+"分", 100,400 ); 180 181 182 //メッセージ 183 if (1 <= h && h <= 17) { 184 OffG.drawString(messages[h], 0, 30); 185 } 186 g.drawImage(OffBuf, 0, 0, this); 187 188 189 //時間を取得する 190 Calendar now = Calendar.getInstance(); 191 h = now.get(now.HOUR_OF_DAY); //時 192 m = now.get(now.MINUTE); //分 193 s= now.get(now.SECOND); //秒 194 mm=now.get(now.MINUTE); //時間表示用 195 196 // 197 198 199 200 201 202 203 204 // その基準時刻と次の基準時刻の間でゲージを動かすか 205 boolean zikanWoHyouziSuru[] = { 206 true, true, 207 true, true, 208 true, true, 209 true, true, 210 true, true, 211 true, true 212 }; 213 214 // 今の時刻がどこに該当するかを計算する 215 int imaNoZikoku = 60 * (60 * h + m) + s;//秒に変換 216 int maeNoKizyunZikoku = 0; 217 int tugiNoKizyunZikoku = 0; 218 int imaNoZikantai = -1; 219 for (int i = 0; i < 12; i++) { 220 int miteiruKizyunZikoku = 60 * (60 * kizyunZikoku[i][0] + kizyunZikoku[i][1]); 221 if (imaNoZikoku < miteiruKizyunZikoku) { 222 if (i > 0) { 223 imaNoZikantai = i - 1; 224 maeNoKizyunZikoku = 60 * (60 * kizyunZikoku[i - 1][0] + kizyunZikoku[i - 1][1]); 225 tugiNoKizyunZikoku = 60 * (60 * kizyunZikoku[i][0] + kizyunZikoku[i][1]); 226 } 227 break; 228 } 229 } 230 if (saisyoNoFureemuDeAru) { 231 maeNiOtoWoNarasitaZikantai = imaNoZikantai; 232 saisyoNoFureemuDeAru = false; 233 } 234 235 // 経過時間と残り時間を計算し。ゲージのパラメータを設定する 236 if (imaNoZikantai >= 0 && zikanWoHyouziSuru[imaNoZikantai]) { 237 // 表示する時間 238 m = (imaNoZikoku - maeNoKizyunZikoku) / 60; 239 E = (tugiNoKizyunZikoku - maeNoKizyunZikoku) / 60; 240 D = (tugiNoKizyunZikoku - imaNoZikoku) / 60; 241 //ゲージのパラメータ 242 A = tugiNoKizyunZikoku; 243 B = maeNoKizyunZikoku; 244 C = imaNoZikoku; 245 } 246 else { 247 // 表示する時間 248 m = 99; 249 E = 99; 250 D = 99; 251 // ゲージのパラメータ 252 A = 640; 253 B = 0; 254 C = 0; 255 } 256 257 // 全体の残り時間を計算する 258 if (imaNoZikoku < hazimariNoZikoku) { 259 // 始まっていない 260 F = 60 * zenntai; 261 } 262 else if (owariNoZikoku < imaNoZikoku) { 263 // 終わった後 264 F = 0; 265 } 266 else { 267 // 実行中 268 F = owariNoZikoku - imaNoZikoku; 269 } 270 // 棒グラフのパラメータを設定する 271 G = F * Width / (60 * zenntai); 272 // 谿九j譎る俣繧貞�縺ォ螟画鋤縺吶k 273 F = (F + 59) / 60; 274 275 // 情報が正しくなるように補正する 276 if (imaNoZikoku % 60 == 0) D--; 277 278 279 280 281 282 if (maeNiOtoWoNarasitaZikantai != imaNoZikantai) { 283 maeNiOtoWoNarasitaZikantai = imaNoZikantai; 284 if (imaNoZikantai >= 0) { 285 //音を鳴らす 286 PutSound(); 287 } 288 } 289 290 291 292 293 294 } 295 296 public void update(Graphics g) { 297 paint(g); 298 } 299 300 public void start() { 301 th = new Thread(this); 302 th.start(); 303 } 304 305 public void stop() { 306 th = null; 307 } 308 309 public void run() { 310 Thread me = Thread.currentThread(); 311 while (th == me) { 312 try{ 313 Thread.currentThread().sleep(delay); 314 }catch (InterruptedException e) { 315 } 316 repaint(); 317 } 318 } 319 320 public static void PutSound(){ 321 AudioClip ac = null; 322 ac = java.applet.Applet.newAudioClip(Javatokei.class.getResource("test.wav")); 323 // XXXXX はクラス名。Minipro.java の場合は Minipro。 324 ac.play(); 325 /* 500ミリ秒待機する */ 326 try{ 327 Thread.sleep(12000); 328 }catch (InterruptedException e){ 329 } 330} 331 public static int[][] loadIntArray(final String filename, final int dim) throws IOException { 332 List<int[]> nums = new ArrayList<int[]>(); 333 334 //Files クラスを使用してファイルを行単位に読み込む。 335 List<String> line = Files.readAllLines(Paths.get(filename), Charset.forName("UTF-8")); 336 337 int pos = 0; 338 int[] vals = new int[dim]; 339 for (String s : line) { 340 vals[pos % dim] = Integer.parseInt(s); 341 pos++; 342 if (pos % dim == 0) { 343 nums.add(vals); 344 vals = new int[dim]; 345 } 346 } 347 if (pos % dim != 0) { 348 nums.add(vals); 349 } 350 return (int[][]) nums.toArray(new int[0][dim]); 351 } 352 353 354} 355 } 356} 357コード

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

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

投稿2015/02/11 05:55

naia

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

以下、ちょっとコードで気になるところを指摘します。

lang

1MediaPlayer chime = MediaPlayer.create(getContext(), R.raw.test);

初期化子のように書いてますけど、多分これが無理です。
これをやるならコンストラクタでやるべきでしょうね

lang

1class SampleView extends View { 2 MediaPlayer chime; 3 //略 4 public SampleView(Context context){ 5 super(context) 6 chime = MediaPlayer.create(getContext(), R.raw.test); 7 } 8 //略 9}

場合によっては、フィールド宣言で計算を使っているものもコンストラクタ内でやるべきかもしれません。

lang

1 //TODO: 時刻を取得する 2 Calendar now = Calendar.getInstance(); 3 h = now.getInstance().get(now.HOUR_OF_DAY); //譎ゅr莉」蜈・ 4 m = now.getInstance().get(now.MINUTE); //蛻?繧剃サ」蜈・ 5 s= now.getInstance().get(now.SECOND); //遘偵r莉」蜈・ 6 mm=now.getInstance().get(now.MINUTE); //時間表示用

各時間を取得するのにその都度getInstance()は不要だと思います。実行する度、違う時刻を返しますので。
get(int)も、フィールド値はstaticフィールドなので、get(Calendar.HOUR_OF_DAY)などが正しい書き方。
MINUTEフィールドを2回取ってるのも謎ですし。

投稿2015/02/09 15:40

編集2015/02/09 16:10
swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naia

2015/02/11 04:07

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

2015/02/11 04:22

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

2015/02/11 04:29

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

2015/02/11 04:35

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

0

書いてみました。

lang

1/* 2 See https://teratail.com/questions/6355 3*/ 4package sample; 5 6import java.io.IOException; 7import java.nio.charset.Charset; 8import java.nio.file.Files; 9import java.nio.file.Paths; 10import java.util.ArrayList; 11import java.util.Arrays; 12import java.util.List; 13 14public class Sample { 15 16 static final int DIM = 2; // DIM 要素の配列 を 1 つの要素にする。 17 18 public static void main(String[] args) { 19 try { 20 final int[][] ary = loadIntArray("data.txt", DIM); 21 for (int[] n : ary) { 22 System.out.println(Arrays.toString(n)); 23 } 24 } catch (IOException ex) { 25 ex.printStackTrace(); 26 } 27 } 28 29 public static int[][] loadIntArray(final String filename, final int dim) throws IOException { 30 List<int[]> nums = new ArrayList<int[]>(); 31 32 //Files クラスを使用してファイルを行単位に読み込む。 33 List<String> line = Files.readAllLines(Paths.get(filename), Charset.forName("UTF-8")); 34 35 int pos = 0; 36 int[] vals = new int[dim]; 37 for (String s : line) { 38 vals[pos % dim] = Integer.parseInt(s); 39 pos++; 40 if (pos % dim == 0) { 41 nums.add(vals); 42 vals = new int[dim]; 43 } 44 } 45 if (pos % dim != 0) { 46 nums.add(vals); 47 } 48 return (int[][]) nums.toArray(new int[0][dim]); 49 } 50} 51// data.txt の内容 52// 1 53// 2 54// 10 55// 11 56// 12 57// 58// 実行結果 59// [1, 2] 60// [10, 11] 61// [12, 0]

投稿2015/02/06 16:07

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naia

2015/02/09 02:59

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

2015/02/09 03:45

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

2015/02/09 04:25

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

2015/02/09 13:16

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

2015/02/11 04: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?)に代入できますでしょうか?
naia

2015/02/11 05: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 を処理できません。明示的コンストラクターを定義する必要があります よろしくお願いします
guest

0

ベストアンサー

配列は二次元ですが、ファイルは一次元なんですね?
こんな感じでしょうか。テストしてませんが。

lang

1public static int[][] loadIntArray(String path) throws IOException { 2 List<int[]> ret = new ArrayList<String>(); 3 try { 4 FileInputStream stream = new FileInputStream(path); 5 BufferedReader reader = new BufferedReader(new InputStreamReader(stream,"UTF-8")); 6 int count = 0; 7 int[] array = null; 8 for ( String line = rd.readLine(); line != null; line = rd.readLine() ) { 9 int num = Integer.parseInt(line); 10 if ( count % 1 == 0 ) { 11 array = new int[2]; 12 array[0] = num; 13 } else { 14 array[1] = num; 15 ret.add(array); 16 } 17 count++; 18 } 19 reader.close(); 20 } catch (UnsupportedEncodingException e) { 21 e.printStackTrace(); 22 } 23 return ret.toArray(new int[0]); 24}

投稿2015/02/06 07:01

shinosan

総合スコア209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問