🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Java

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

Q&A

解決済

3回答

6069閲覧

コンストラクタ名があると出てしまいます。

nubba

総合スコア16

Java

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

0グッド

0クリップ

投稿2019/11/02 08:21

編集2019/11/02 09:18

前提・実現したいこと

キーボードから1が入力されたらスピードが1上がるspeedUpメソッドを呼び出ししたいです。
また
キーボードから2が入力されたらスピードが1下がるspeedDownメソッドを呼び出ししたいです。
そしてキーボードから3の入力で終了するようにしたいです。

発生している問題・エラーメッセージに内容は書いたのですが、どのようにすれば上記のように動作するのか教えてほしいです。

発生している問題・エラーメッセージ

3が入力されるまで何度も聞かれるようにするにはどうすれば良いですか? 今の状態だと一度1~3の数字を押すとspeedShow()が一度起動後終了してしまいます。 すいません............ 修正点:クラスをCarとTestのみへ変更。

java

1import java.util.Scanner; 2public class Test{ 3 4 public static void main(String[] args) { 5 6 Car no01=new Car(); 7 8 System.out.println("スピードを上げるなら[1]、" 9 + "下げるなら[2]を入力([3]は終了)"); 10 11 Scanner sc=new Scanner(System.in); 12 int n=sc.nextInt(); 13 14 if(n==1) { 15 //スピードup 16 no01.speedUp(); 17 no01.speedShow(); 18 19 } 20 if(n==2) { 21 //スピードDown 22 no01.speedDown(); 23 no01.speedShow(); 24 25 } 26 if(n==3) { 27 //終了 28 System.out.println("終了します"); 29 } 30 sc.close(); 31} 32}

java

1public class Car { 2 final static int LIMIT=50; 3 4 private int speed; 5 6 Car(){ 7 this.speed=0; 8 } 9 10 void speedDown() { 11 if(this.speed>0) { 12 this.speed--; 13 } 14 } 15 16 void speedUp() { 17 if(this.speed<80) { 18 this.speed++; 19 } 20 } 21 22 void speedShow() { 23 if(LIMIT>this.speed) { 24 System.out.println("制限速度"+LIMIT+"km/h"); 25 System.out.println("現在速度"+this.speed+"km/h"); 26 System.out.println("制限速度内です(あと"+(LIMIT-this.speed)+"km/hです)"); 27 } 28 if(LIMIT==this.speed) { 29 System.out.println("制限速度"+LIMIT+"km/h"); 30 System.out.println("現在速度"+this.speed+"km/h"); 31 System.out.println("制限速度限界"); 32 } 33 if(LIMIT<this.speed) { 34 System.out.println("制限速度"+LIMIT+"km/h"); 35 System.out.println("現在速度"+this.speed+"km/h"); 36 System.out.println("制限速度を"+(this.speed-LIMIT)+"km/hオーバーしています"); 37} 38} 39}

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

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

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

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

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

guest

回答3

0

ベストアンサー

3 が入力されるまで繰り返すという言葉通りコーディングすれば良いです。
具体的には int n=sc.nextInt() から sc.close() までの形を次のイメージでしょうか。

Java

1int n; 2while ((n = sc.nextInt()) != 3) { 3 if ( n == 1 ) { 4 // 1が入力された時の処理をここへ 5 } else if ( n == 2 ) { 6 // 2が入力された時の処理をここへ 7 } 8} 9System.out.println("終了します"); 10sc.close();

if ~ else if のところは switch ~ case での書き換えも考えられますが混乱させないために if 文のままとしてあります。ただ、n が 2 であるかどうかは n が 1 の時は調べる意味がないので、 else if に返させてもらいました。
使われているJavaのバージョンによっては try-with-resource 構文にするなど工夫の余地もありますね。そうしないと、Eclilpse などでは sc に対して警告が出ます(警告:「sc は try-with-resource で管理する必要があります」)。もっとも、sc をクローズすると包含されている System.in がクローズされるので、sc.close() 後は System.in も使えなくなるのでご注意を。

投稿2019/11/03 02:45

ironya

総合スコア456

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

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

nubba

2019/11/03 05:26

詳しく教えていただいてありがとうございました! ifで書いていましたがswitchでも書けるように勉強します! ちなみにですがironyaさんならこのプログラムを書くならswitchで書きますか?
ironya

2019/11/03 07:09

このコードの規模感なら if 文のままで済ませてしまうかな。
guest

0

クラス名と同じ名前のメソッドを定義することはできません。

慣習的にクラス名はCamelCaseで命名されるので、
クラス名をそれぞれ SpeedUp, SpeedDown に変えると良いと思います。

そもそも

SpeedUpクラスとSpeedDownクラスを別途設ける必要はあるのでしょうか?
Carクラスがスピードを管理しているなら、速度に関するメソッドは直接持たせてやれば良いのでは。

投稿2019/11/02 08:26

LouiS0616

総合スコア35668

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

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

nubba

2019/11/02 08:33

クラス分けをやめて、CarクラスにspeedUpとspeedDownを持たせてやってみます!
LouiS0616

2019/11/03 07:10

ああ、質問が追加されていたのですね。 質問を編集しても回答者に通知は無いので、コメントなど入れるようにすると良いでしょう。気付かなかったら当然対応もできませんから。
guest

0

クラス名と同じ名前を持ったメソッドはコンストラクタとして扱われ、返り値の型を書くことが出来ません。

投稿2019/11/02 08:23

swordone

総合スコア20669

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問