開発環境
- Microsoft Windows 8 Pro 64bit 日本語 (OS)
- Microsoft Visual Studio Express 2012 for Windows Desktop (IDE)
- プログラミング言語: C#
『初めてのC# 第2版』(Jesse Liberty+Brian MacDonald著、日向俊二訳、オライリー・ジャパン、2006年、ISBN978-487311-294-7)の 第8章(配列)10.9(練習問題)問題10-4を解いてみる。
その他参考書籍
問題10-4.
コード
using System; using System.Text.RegularExpressions; class Dog { private int weight; private string name; public Dog(int weight, string name) { this.weight = weight; this.name = name; } public int Weight { get { return weight; } set { weight = value; } } public string Name { get { return name; } set { name = value; } } } class Tester { public void Run() { const int rows = 8; const int cols = 8; string[,] chessboard = new string[rows, cols]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { chessboard[i, j] = (i % 2 == 0 && j % 2 == 0) || (i % 2 != 0 && j % 2 != 0) ? "黒" : "白"; } } Console.WriteLine("チェス盤(8k×8)"); for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { Console.Write(chessboard[i, j]); } Console.WriteLine(); } Console.WriteLine("座標から色を求める(空白で終了)"); Regex reg = new Regex(@"^\s*$"); while (true) { try { Console.Write("x座標: "); string sx = Console.ReadLine(); if (reg.IsMatch(sx)) { break; } int x = Convert.ToInt16(sx) - 1; Console.Write("y座標: "); string sy = Console.ReadLine(); if (reg.IsMatch(sy)) { break; } int y = Convert.ToInt16(sy) - 1; Console.WriteLine(chessboard[x, y]); } catch (FormatException e) { Console.WriteLine(e.Message); } catch (ArgumentException e) { Console.WriteLine(e.Message); } catch (Exception e) { Console.WriteLine(e.Message); } } } static void Main() { Tester t = new Tester(); t.Run(); } }
入出力結果(Console Window)
チェス盤(8k×8) 黒白黒白黒白黒白 白黒白黒白黒白黒 黒白黒白黒白黒白 白黒白黒白黒白黒 黒白黒白黒白黒白 白黒白黒白黒白黒 黒白黒白黒白黒白 白黒白黒白黒白黒 座標から色を求める(空白で終了) x座標: 1 y座標: 1 黒 x座標: 5 y座標: 6 白 x座標: 5 y座標: 5 黒 x座標: 6 y座標: 5 白 x座標: 6 y座標: 6 黒 x座標: 10 y座標: 10 インデックスが配列の境界外です。 x座標: c 入力文字列の形式が正しくありません。 x座標: 10 y座標: c# 入力文字列の形式が正しくありません。 x座標: 続行するには何かキーを押してください . . .
ちなみにJavaScriptの場合。
コード(TextWrangler)
var result = ""; var chessboard = []; var rows = cols = 8; for(var i = 0; i < rows; i++){ chessboard[i] = []; for(var j = 0; j < cols; j++){ chessboard[i][j] = (i % 2 === 0 && j % 2 === 0) || (i % 2 !== 0 && j % 2 !==0) ? "黒" : "白"; } } result += "チェス盤(8×8)\n"; for(var i = 0; i < rows; i++){ for(var j = 0; j < cols; j++){ result += chessboard[i][j]; } result += "\n"; } try{ var x = parseInt($('#t0').val()) - 1; var y = parseInt($('#t1').val()) - 1; if(!chessboard[x][y]) throw "エラー"; result += chessboard[x][y] + "\n"; } catch (e){ result += e + "\n" + "入力座標を確認してください。"; } $('#pre0').text(result);
pythonの場合。
sample.py
コード(TextWrangler)
#!/usr/bin/env python3.3 # -*- coding: utf-8 -*- rows = cols = 8 chessboard = [] for i in range(rows): chessboard.append([]) for j in range(cols): if (i % 2 == 0 and j % 2 == 0) or (i % 2 != 0 and j % 2 != 0): chessboard[i].append("黒") else: chessboard[i].append("白") for a in chessboard: for b in a: print(b, end="") print() import re pattern = re.compile(r"^\s*$") while True: try: sx = input("x座標: ") if re.match(pattern, sx): break sy = input("y座標: ") x = int(sx) y = int(sy) print(chessboard[x][y]) except ValueError as err: print(err) except IndexError as err: print(err) except Exception as err: print(err)
入出力結果(Terminal)
$ ./sample.py 黒白黒白黒白黒白 白黒白黒白黒白黒 黒白黒白黒白黒白 白黒白黒白黒白黒 黒白黒白黒白黒白 白黒白黒白黒白黒 黒白黒白黒白黒白 白黒白黒白黒白黒 x座標: 1 y座標: 1 黒 x座標: 5 y座標: 6 白 x座標: 5 y座標: 5 黒 x座標: 6 y座標: 5 白 x座標: 6 y座標: 6 黒 x座標: 10 y座標: 10 list index out of range x座標: python y座標: javascript invalid literal for int() with base 10: 'python' x座標: 10 y座標: python invalid literal for int() with base 10: 'python' x座標: python y座標: 10 invalid literal for int() with base 10: 'python' x座標: $
0 コメント:
コメントを投稿