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

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

新規登録して質問してみよう
ただいま回答率
85.35%
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Java

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

Q&A

解決済

3回答

1022閲覧

変数が初期化されたままになって出力されてしまう

yuukaMinami

総合スコア5

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Java

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

0グッド

0クリップ

投稿2021/06/29 01:23

編集2021/06/29 01:33

前提・実現したいこと

変数を初期化するために0を代入すると、そのままになってしまいます。

paymentを、Switchのなかでそれぞれ計算した値を、messageで出力したいです。
けれど、最初に初期化して0を入れると、その後の処理を行わないで、そのまま0が出力されてしまいます。

Switchのなかの計算を行ってからmessageに出力するには、どうすれば良いのでしょうか?

該当のソースコード

java

1import java.io.File; 2import java.io.FileNotFoundException; 3import java.util.Scanner; 4 5public class Kadai02 6{ 7 public static void main(String[] args) 8 { 9 //File f = new File("C:/Users/Kana-cosmos/Desktop/emp02.txt"); 10 File f = new File("C:/Users/Kana-cosmos/Desktop/emp02.txt"); 11 //Scannerを使って文字列の読み込みを行う 12 13 try(Scanner sc = new Scanner(f)) 14 { 15 //useDelimiterメソッドで区切り文字の指定 16 sc.useDelimiter(","); 17 18 //hasNextLineで次の行が存在するか確認 19 while(sc.hasNextLine()) 20 { 21 String empCode = sc.next(); 22 String empName = sc.next(); 23 24 String basic = sc.next(); 25 int basicPay = Integer.parseInt(basic); 26 27 String family = sc.next(); 28 int dependentRelatives = Integer.parseInt(family); 29 30 int payment = 0 ; 31 int a = 10000; 32 int b = 5000; 33 int c = 3000; 34 int d = 2000; 35 36 String message = " 社員コード:"+empCode + " 氏名:"+empName + " 支給額:"+payment; 37 38 switch(dependentRelatives) 39 { 40 case 0: 41 payment = basicPay; 42 System.out.println(message); 43 break; 44 45 case 1: 46 payment = basicPay + a; 47 System.out.println(message); 48 break; 49 50 case 2: 51 payment = basicPay + (a+b); 52 System.out.println(message); 53 break; 54 55 case 3: 56 payment = basicPay + (a+c+c); 57 System.out.print(message); 58 break; 59 60 default: 61 if(dependentRelatives >= 4) 62 { 63 int total3People = a + b + c; 64 payment = basicPay + total3People + ((dependentRelatives-3)*d) ; 65 System.out.println(message); 66 break; 67 } 68 //message = " 社員コード:"+empCode + " 氏名:"+empName + " 支給額:"+payment; 69 } 70 //次の行へ 71 sc.nextLine(); 72 } 73 } catch (FileNotFoundException e) { 74 // TODO 自動生成された catch ブロック 75 e.printStackTrace(); 76 } 77 } 78}

試したこと

①messageをdefaultのあとに持ってきて、上記でメッセージとpaymentを初期化
→しかし、messageを初期化するために、paymentを初期化しているとこに「String message = ""」
をすると、空文字のまま出力されていまう。

補足情報(FW/ツールのバージョンなど)

読み込んでいるデータ

01,yamadaHanako,200000,0,
02,satoTaro,200000,1,
03,nakanoYuka,300000,2,
04,odaMasato,400000,3,
05,murataMomoko,500000,4,

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

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

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

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

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

guest

回答3

0

ベストアンサー

変数に変数を保持してるわけではないので変化はしません。
保持してるのはあくまで型にそった情報。
messageという変数に入れた時点のpaymentしかなってないわけです。

現在のコードを活かすなら

Java

1String message = " 社員コード:"+empCode + " 氏名:"+empName + " 支給額:";

とした上で、
こう↓

java

1System.out.print(message+payment); 2

投稿2021/06/29 01:39

m.ts10806

総合スコア80875

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

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

yuukaMinami

2021/06/29 01:49

ありがとうございます!できました! 変数のことに関して、完全に誤解しておりました。 今回の場合、messageのなかにpaymentの変数を用意しているわけではなく、あくまで別の変数で、出力場所が一緒と言うことですか? paymentの場所を指定していないのに、messageのところに出力されるのは、プラスで紐付けしているから、という認識で合っていますでしょうか?
m.ts10806

2021/06/29 01:54

>messageのなかにpaymentの変数を用意しているわけではなく は合ってますが >あくまで別の変数で、出力場所が一緒と言うことですか? は違うように思います。 変数に代入するときに展開されるので、messageという変数に取り込まれてます。デバッグしてみると中がどうなっているか分かります。 >paymentの場所を指定していないのに、messageのところに出力されるのは、プラスで紐付けしているから、という認識で合っていますでしょうか? +はString型の変数に使うと数値型があっても文字列の連結になります。紐づけではありません。
yuukaMinami

2021/06/29 02:00

なるほど、ありがとうございました!
m.ts10806

2021/06/29 02:01

デバッグは覚えてくださいね。 それだけで今回のような課題は自己解決しやすくなります。
guest

0

Switchのなかの計算を行ってからmessageに出力するには、どうすれば良いのでしょうか?

Switchの後でmessageに代入しましょう

投稿2021/06/29 01:37

ozwk

総合スコア13553

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

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

0

その変数に代入するコードを通らないってだけの話かと

投稿2021/06/29 01:26

y_waiwai

総合スコア88042

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

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

yuukaMinami

2021/06/29 01:30 編集

ありがとうございます。paymentを、Switchのなかでそれぞれ計算した値を、messageで出力したいのですが、そのために、試してみたことにあるように工夫してみたのですが、うまくいきませんでした。これを実現するには、どのようなコードにすればよいのかわかりません。
y_waiwai

2021/06/29 01:35

まずはデバッグ環境を構築しましょう。 Eclipseなどをインストールすればいいです 任意の場所で実行を止め、変数のナカミを確認できます そこから1行づつ実行していけば、何が悪いかわかるでしょ
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問