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

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

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

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

2回答

678閲覧

if構文の中の変数の値を取れない

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

2クリップ

投稿2019/10/02 01:04

編集2019/10/02 01:41

androidstudioのkotlinでif構文の中に入った変数が取り出せなくて困ってます。

if(a==1){
val siritaiHENSUU:Int=2
}
var b:Int = c + siritaiHENSUU


このsiritaiHENSUUの数字をif構文の外でも拾いたいです。

これがデキるときとデキないとき(ビルドが通る通らないとき)があって混乱します。
お教えいただけたら幸いです。

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

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

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

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

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

swordone

2019/10/02 01:10

こういうのはQiitaにでも書くか、自分のファイルに書きましょう。
退会済みユーザー

退会済みユーザー

2019/10/02 02:08 編集

わかりました。削除依頼を出します
swordone

2019/10/02 01:26

自分から「質問に見せかけた備忘録」と言ってしまっているので、「質問ではない」ことが明確です。あくまでここは「質問サイト」なのですから、目的外に使われるのはとがめられて当然です。
m.ts10806

2019/10/02 01:40 編集

回答してしまって解決済みにしてしまってるので「削除依頼」は通りにくいのでは。 回答した時点で通常の「削除依頼」にはなりません。 ガイドライン一通り読んでから利用してください。ガイドラインもマナーも無視した利用者に心が狭いも何もありません。赤信号渡って「いいじゃん車来てないから」と言ってるのと同じです。 あとせめて「ウソ質問」「質問に見せかけた」は取っ払ってください。
退会済みユーザー

退会済みユーザー

2019/10/02 02:11 編集

投稿した側は善意だったんですけどね。迷惑なら申し訳ありませんでした。
m.ts10806

2019/10/02 01:54 編集

書いてあることしか見る方は分からないので。それに見る人は回答者だけではなく「同じような問題を抱えた質問者側の人」も見ます。そういった人がこのタイトルや内容で見ようとするか、本当に参考になるかどうかも考えてください。 あと、"挫折"っていう言葉を簡単に使う人はどんな職業も向きません。本当に挫折してから悩め。
退会済みユーザー

退会済みユーザー

2019/10/02 02:11 編集

削除依頼だしてるので投稿しなくていいですよ。こ
m.ts10806

2019/10/02 02:03

この程度を説教と思うなら尚更やめといたほうがいいですね。 他のコメントを見てもアドバイスだと捉えられない厄介なご性格のやうで(変にプライドも高いようなので)そのあたり自身を振り返られたほうが多少はPGスクールとやらに使ったお金や時間も報われるのではないでしょうか。
swordone

2019/10/02 02:05

ちゃんとガイド読みましょう。その削除依頼は「絶対に通りません」。 最初の私のコメントで「心が狭い」とか言っちゃうような人はどこでも通用しないと思いますよ。
tetutetu

2019/10/02 02:07

そもそも何かのサービスを享受するにあたってルール、規約が存在しない方が稀なわけで。 それを一切読まずにガイドラインに反する投稿をして、指摘を受けたら謎の反論。 善意であることは辛うじて分かりますが、情報発信の媒体としてQiitaなり自身のブログ、SNSでなく、質問サイトでわざわざ質問の形式を装って投稿する意味を理解できる方の方が少ないですよね。 「PGにこういう方が多そう、人間関係で挫折しそう」というより一般的な常識が足りな過ぎて人間社会で生きていくのに支障が出ると思いますよ。
退会済みユーザー

退会済みユーザー

2019/10/02 02:10

削除依頼出しているのでコメントは不必要ですよ。
Zuishin

2019/10/02 02:16

あなたの依頼が全部通るわけではありません。世の中の人は全員心が狭いので。
m.ts10806

2019/10/02 02:20

ガイドライン読みましょう。 https://teratail.com/help/delete-policy 運営判断が必要なイレギュラーケースであることが明確に分かると思います。 自己解決にしてしまっているのがまたマズイやり方なので、「削除依頼出している」と胸張って言える状態じゃないですよ。 指摘はアドバイスとしてまず受け入れましょう。「不必要」とまで言えるのは指摘を受け入れてからです。 あくまでここもすべて「アドバイス」です。
dit.

2019/10/02 07:37

備忘録を質問とすることの是非はひとまず置いておいて、せめて質問や回答はマークダウンhttps://teratail.com/help#about-markdownを使えるようになってください。
guest

回答2

0

※ Kotlinは遊びでちょっとしか触ったことないので、詳しい人は突っ込んでくれると助かります。

a1では無いときは0であると仮定すれば、次のように書くと良いでしょう。

Kotlin

1val siritaiHENSUU = if (a == 1) { 2 2 3} else { 4 0 5}

if内部は式一つなので{}はなくても良いです。siritaiHENSUUIntであることが自明なので、型をつけてもつけなくてもいいです。(ここら辺はコーディングスタイルかと思います。)

Kotlinのifは式です。式であるがゆえにこのような書き方ができます。Javaなど他言語の場合はif文しかないため、三項演算子条件 ? 真の場合の式 : 偽の場合の式を用いる必要があります(逆に、Kotlinには三項演算子はありません)。


【すこし蛇足】

質問者の回答のまずい点

質問者の自己回答には二つの問題があります。

  1. スコープを不用意に大きくしている。

質問の内容からsiritaiHENSUUifの外側直下、広くてもメソッド中だけで有効であれば十分でしょう。しかし、質問者のコードはクラス全体まで不用意に大きくしています。スコープを拡げることは思わぬ副作用を招くため、慎重に行うべきです。

  1. そもそもvalなのでエラーになる。

valは再代入不可です。つまり、このコードは別のエラーを発生させるだけです。varにすればコンパイルエラーは無くなりますが、その他の部分で代入できてしまいます。インスタンス変数にすることをこだわるなら、せっかくのvalが劣化してしまうと言うことです。


【完全な蛇足】

既に回答を知っている質問をした後すぐに回答するのはありか?

他所の所ですが、スタック・オーバーフローには自分の質問に回答できますか?という項目があります。スタック・オーバーフローではすでに回答を知っていても、質問するのにあわせて回答することは、いわゆるQ&A形式というナレッジになるため推奨される行為です。

ただ、質問と同時に回答する行為はある程度の信頼度が必要です。15はとても低いように思えますが、単に回答しても信頼度が上がらないスタック・オーバーフローにおいて、知識が全くない人にとってはかなりハードルは高いと思います。また、最初に回答する機会を失った場合、信頼度が100なければ8時間待つ必要がありますし、さらに、自己回答を承認(teratailでいうベストアンサー相当)するには48時間待たなければなりません。これは、少なくともスタック・オーバーフローを知っていて、ある程度回答等をしたことがあるかどうかでふるいに掛けると同時に、自己回答やその承認に実行不可時間を設けることで、他の人のよりよい回答をえる機会を増やすことを目的にしています。

さて、teratailはどうかというと、別にそのようなルールはみあたりません。自己回答はいつでもできますが、質問した後も試し続けている人であれば、誰かの回答の前に解決策がみつかることも希によくあることですので、制限等をしないのは当たり前かと思います。かといって、回答を知っているのに質問して、すぐに回答をつけて、ベストアンサーにするという行為はどうなのでしょうか?

スタック・オーバーフローのように、信頼度や時間による制限があれば、質の悪い回答は駆逐され、よりよいナレッジが増えることにもなりますので、悪いことではないように思います。しかし、teratailにはそのような仕組みがありません。逆の見方をすれば、質の悪いQ&Aが大量に作られてしまう機能的な欠点があるとも言えます。多くの人が、そのような欠点につけ込んで、自己満足のためにQ&Aを作って行けば、質の悪いナレッジになってしまうのではないのでしょうか?

ひとまず、teratailの運営がどのように考えているかまでは私は知りません。ただ、スタック・オーバーフローのような考えでQ&A形式の質問と回答をしたいと主張するのであれば、他のより良い回答を待つべきでしょうし、人の意見は真摯に聞くべきかと思います。少なくともteratailがどういうものかを知ってから、半年ROMってろとまで言いませんが、ある程度は質問や回答を行ってから、行うべきでは無いでしょうか。

投稿2019/10/02 10:15

編集2019/10/02 10:18
raccy

総合スコア21735

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

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

0

ベストアンサー

if構文やfor構文”内”でvalやvarで宣言した変数は「ローカル変数」になってしまい、構文の外で参照できなくなります。
そこでクラス全体で使う変数は、classのすぐ下に変数の目次を作って宣言しましょう。

class uso{
val a:Int=0
var b:Int=0
var c:Int=0
val siritaiHENSUU:Int=0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

if(a==1){
siritaiHENSUU=2
}
b = c + siritaiHENSUU
}
}
//-------------------------
すると、class全体のローカル変数になってくれるので、各if構文の中でも使えます。
逆にそのif構文内でしか使わないような一時的な変数はifの中で宣言する形です。

古いjavascriptだと無いルールなんで知らずにJAVAに来る人もいるかと思います。

投稿2019/10/02 01:13

編集2019/10/02 02:10
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

maisumakun

2019/10/02 01:19

> javascriptだと無いルールなんで ES6以降のletやconstはブロックスコープになっています。
退会済みユーザー

退会済みユーザー

2019/10/02 01:24

削除依頼出してるのでコメント必要ないですよ。
swordone

2019/10/02 03:11

まさかとは思うけど、「JavaScript = Javaの古いやつ」とか思ってない?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問