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

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

ただいまの
回答率

91.35%

  • Swift

    5060questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Xcode

    2869questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

.csvを読み込み配列に変換したが正しい数値を示さない。

解決済

回答 1

投稿 2017/12/01 18:35 ・編集 2017/12/02 16:45

  • 評価
  • クリップ 0
  • VIEW 66

testyoutatsu

score 5

いつもこちらにはお世話になっています。
先日始めたばかりのプログラミング初心者です。基礎から間違えてるかもしれません。

前提・実現したいこと

.csvを読み込み、改行、カンマの順に分割して配列「array[][]」に格納しました。
この時点で print(array) を実行したところ、以下のソースコードの一番下のように出力されました。
問題なく格納できています。

次に配列から一列の数値を取り出し変数candle11,candle12、candle13に代入するため以下のようなコードを書きました。

candle1 = Int(array[randomNum()][0])!
candle2 = Int(array[randomNum()][1])!
candle3 = Double(array[randomNum()][2])!

random()はランダムな数字(0~11)です。

candle1 = candle2 にならないといけないはずなのですが、それぞれ違う値になってしまいます。

print (candle1) // 1
print (candle1) // 4
print (candle1) // 2.0
このように全てバラバラな値になってしまいます。

この問題はどのようにしたら解決できますでしょうか?

該当のソースコード

問題のコード
candle = Int(array[randomNum()][1])!


【.csvのデータはこれです。】
1,1,1
2,2,2
3,3,3
4,4,4
5,5,5
6,6,6
7,7,7
8,8,8
9,9,9
10,10,10
11,11,11
12,12,12


print(array)//実行した結果が下
[["1", "1", "1"], ["2", "2", "2"], ["3", "3", "3"], ["4", "4", "4"], ["5", "5", "5"], ["6", "6", "6"], ["7", "7", "7"], ["8", "8", "8"], ["9", "9", "9"], ["10", "10", "10"], ["11", "11", "11"], ["12", "12", "12"], [""]]

回答よろしくお願いします。

追記・試したこと

ソースコードを大きく変更しました。
エラーをわかりやすくするため.csvのデータを1-12を羅列したものに変更しました。
1つだけ数値がおかしいと思っていましたが、3つの数字がバラバラであることがわかりました。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • fuzzball

    2017/12/01 20:53

    print(Int(array[1][1])!) が0、print(Int(array[3][1])!) が1になるのでしょうか?

    キャンセル

  • testyoutatsu

    2017/12/01 21:52

    はい、そうです。

    キャンセル

  • fuzzball

    2017/12/01 22:39

    こちらでは、そういうことにならないのですが。

    キャンセル

  • testyoutatsu

    2017/12/02 16:48 編集

    質問文とソースコードを変更しました。

    キャンセル

回答 1

checkベストアンサー

+1

randomNum()は、その名の通り呼び出すたびにランダムな値を返すのではないでしょうか?

そうであれば、質問のコードだと、arrayに与える乱数値が3つとも違うものになってしまいます。(たまたま同じ場合はありますが)

下記コードのように、同じ値を与えるようにしないといけません。

let random = randomNum()
candle1 = Int(array[random][0])!
candle2 = Int(array[random][1])!
candle3 = Double(array[random][2])!

それよりも、最初に1セット分まとめて取得する方が良いですね。

let candles = array[randomNum()]
print(candles)
//=> ["4", "4", "4"]

candle1 = Int(candles[0])!
candle2 = Int(candles[1])!
candle3 = Double(candles[2])!
print(candle1, candle2, candle3)
//=> 4 4 4.0

投稿 2017/12/02 17:47

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/12/02 18:24

    言われてやっと気づきました。本当にしょうもない質問に回答いただきありがとうございます。

    キャンセル

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

ただいまの回答率

91.35%

関連した質問

  • 受付中

    SwiftでTextFieldの値を読み込む

    Swiftで、Textfieldに打ち込まれた値をString型で取得し、関数に打ち込みたいのですが、自分なりのやり方ではできませんでした。方法を具体的に教えてください。(一応、自

  • 解決済

    [Swift]TableViewのsectionに年月を、rowに日を表示したい

    ["2016/08/26", "2016/08/26" ,"2016/08/26", "2016/08/01", "2016/07/27", "2016/05/26", "2016

  • 解決済

    Swift3.0 Xcode8.1 tableViewで選択した要素の形式がDictionary型の...

    TableViewで要素の並び替えを行うときにデータの形式が辞書の場合に、その列に含まれている要素を指定すると、辞書型ではソースの列を指定できないとエラーが出ます。 この場合

  • 受付中

    構造体(Swift)の型について

    swiftにおける構造体の型?について質問です。 現在、swiftでiOSアプリを開発していて、documents配下のファイルパスを取得しようとした際、以下のような記載をす

  • 受付中

    Swift3でsorted()が使用できない?

    Swift3で、 array.sorted() をつかおうとすると、 読み込めずエラーになるのですが、 廃止された?

  • 解決済

    SwiftでBonjourのデバイスにアクセスしたい

    SwiftでLAN内のBonjourやAvahiに対応したデバイスを検索し、そのIPアドレスを求めたいと思います NetServiceBrowserを利用すれば実現しそうな気がす

  • 解決済

    if文

    実現したいこと 重複なく値を出力させたい。 該当のソースコード //: Playground - noun: a place where people can play

  • 解決済

    Array index out of rangeの解決。

    前提・実現したいこと swiftでクイズアプリを作成しています。各問題では選択肢ボタンを押すと次の問題に移行するシステムにしています。時間制も設けており同じく制限時間を過ぎると次

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

  • Swift

    5060questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Xcode

    2869questions

    Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。