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コード
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。