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

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

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

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

Q&A

解決済

4回答

7549閲覧

暗証番号入力のプログラム

nonono

総合スコア13

Java

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

0グッド

0クリップ

投稿2015/10/17 11:52

初めてこのサイトを利用するのとjava初心者なので、もし至らない点があればご指摘ください。

暗証番号をキーボードから入力し、正しければ「暗証番号が確認できました」間違っていれば「暗証番号が確認できません。 もう一度暗証番号を入力してください」というメッセージを表示させ、再入力(正しい暗証番号が入力されるまでループ)させるプログラムを書いているのですが、暗証番号を入力しても正しくても間違っていても数字入力が終わった時点でコンソールが終了されます。
理想
パターン1

暗証番号を入力してください。
//↓ 暗証番号入力受付
1111 //正しい暗証番号
//↓
暗証番号が確認できました。

パターン2
暗証を入力してください。
//↓ 暗証番号入力受付
2222 //間違った暗証番号
//↓
暗証番号が確認できません。もう一度暗証番号を入力してください
//↓ 暗証番号入力受付
暗証番号を入力してください。
// 正しい暗証番号が入力されるまでループ

現実
パターン1
暗証番号を入力してください。
//↓ 暗証番号入力受付
1111 //正しい暗証番号
//終了

パターン2
暗証番号を入力してください。
//↓ 暗証番号入力受付
2222 //間違った暗証番号
//終了

素人が無い知恵振り絞って考えてもダメで独学で勉強していて周りに教えてくれる人もいないのでどうか知恵を貸してください。
1個目のソースが現実のパターンになり、2個目のソースは「構文エラーがあります。"while ( Expression ) ;" を挿入して DoStatement を完了してください」が全く解決しなくて実行できてないです。

1個目
import java.util.Scanner;

public class Yooo {
public static void main(String[] args){
Scanner man=new Scanner(System.in);
boolean a;
int A; //正しい暗証番号 1111
String an;

an="暗証番号を入力してください"; a=true; System.out.println(an); A=man.nextInt(); while(!a){ System.out.println(an); A=man.nextInt(); if(A==1111){ System.out.println("暗証番号が確認できました。"); a=true; } if(a){ System.out.println("暗証番号が確認できません。 もう一度"+an); A=man.nextInt(); } } }

}

2個目
import java.util.Scanner;

public class Hoooo {
public static void main(String[] args){
Scanner man=new Scanner(System.in);
boolean a;
int A; //正しい暗証番号 1111
String an;

an="暗証番号を入力してください"; a=true; do{ System.out.println(an); A=man.nextInt(); if(A==1111){ System.out.println("暗証番号が確認できました。"); a=true; } if(a){ System.out.println("暗証番号が確認できません。 もう一度"+an); A=man.nextInt(); }while(!a); } } }

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

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

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

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

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

guest

回答4

0

まず「どのタイミングで何をするのか」ということを考えながら,コードに文章を交えて書いてみましょう.
基本は「正しいパスワードが入力されるまで繰り返し入力を求める」ことなので

java

1do{ 2 パスワードを入力 3}while(入力されたパスワードが間違っている);

これが大枠になります.これをもとに,具体的にどうするのかを考えながら文章・コード化してみてください.
あとどうもブロックがずれていることに気づいていないようなので,ブロックを作るときは"{"に対応する"}"を先に書いてしまう癖を付けましょう.

あるいはdo-whileを使わなくとも通常のwhileで次のような書き方で(Eclipse上では)うまく動作しました.

java

1import java.util.Scanner; 2 3public class Test { 4 5 public static void main(String[] args) { 6 Scanner s = new Scanner(System.in); 7 System.out.println("入力"); 8 while (s.nextInt() != 1) { 9 System.out.println("エラー!もう一度"); 10 } 11 System.out.println("成功"); 12 s.close(); 13 } 14}

投稿2015/10/17 13:02

編集2015/10/18 13:17
swordone

総合スコア20651

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

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

nonono

2015/10/17 15:40

すみません。 まだ素人なものでお見苦しいソースで申し訳ないです。 綺麗に書けるよう精進します。
guest

0

以下のような感じでしょうか?

java

1import java.util.Scanner; 2 3public class Yooo { 4 public static void main(String[] args) { 5 Scanner man = new Scanner(System.in); 6 7 System.out.println("暗証番号を入力してください。"); 8 int A = man.nextInt(); 9 10 while (A != 1111) { // 正しい暗証番号 1111 11 System.out.println("暗証番号が確認できません。 もう一度暗証番号を入力してください。"); 12 A = man.nextInt(); 13 } 14 15 System.out.println("暗証番号が確認できました。"); 16 } 17}

まずは落ち着いて、ozwk様の回答の通り実現したいことをフローチャートに書き起こしてみることをお勧めします。

もし、まだお使いでなければ、プログラミング用のエディタも導入しましょう。
変数名・メソッド名を補完してくれたり、構文エラーを指摘してくれたりするので、格段に効率が上がります。

投稿2015/10/17 13:42

KiyoshiMotoki

総合スコア4791

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

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

nonono

2015/10/17 15:39

プログラム用のエディタというのがあったのですね。 知りませんでした。 是非とも導入してみます。
guest

0

・2個目

java

1do{ 2~~~ 3}while(~~~);

が正しい形ですね。

それを踏まえてコードを見なおして下さい。
whileの位置がおかしくありませんか?

2個めのコードをいろいろ省略して書くと、

java

1do{ 2 if(){ 3 } 4 if(){ 5 }while(); 6}

こうなりますよね


・共通

java

1if(正しかったら){ 2 a=true; 3} 4if(a==true){ 5 もう一度入力させる 6}

これだと正しかった場合a=trueになり、
その後if(a==true)を判定するわけですから、
結局もう一度入力を求められますよね?

まずはいきなりコードを書かずに、
紙にフローチャートなどを書くなどして、きちんとロジックを設計することから始めるといいと思います。


do{に対応する}がズレていることに気が付かないということは、
ひょっとしてメモ帳相当のエディタでコードを書いていませんか?
たしかにプログラムはメモ帳でも書けますが、
普通はプログラムを書くことに特化したエディタを使います。
初心者こそちゃんとしたエディタを使いましょう。

投稿2015/10/17 11:56

編集2015/10/17 13:20
ozwk

総合スコア13528

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

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

nonono

2015/10/17 12:08

何回見返してもdo whileを調べても分からないです泣 どうか答えを教えてください。
Ju-YI

2015/10/17 12:54 編集

while文の前の A=man.nextInt();を消す if(A==1111){ System.out.println("暗証番号が確認できました。"); a=true; } else{ System.out.println("暗証番号が確認できません。 もう一度"+an); } とりあえずこれで動くと思いますが可読性を高めるなら 条件式の中に否定は使わないほうがいいと思います。 例えば 初期値はa=falseをいれて while(a==false){ System.out.println(an); A=man.nextInt(); if(A==1111){ System.out.println("暗証番号が確認できました。"); a=true; } else{ System.out.println("暗証番号が確認できません。 もう一度"+an); } } こうすれば一致するまでループを抜けないということがはっきりします
guest

0

自己解決

ご回答くださった皆様方ありがとうございました。
なんとか自己解決することができました!

import java.util.Scanner;

public class Oha {
public static void main(String[] args){
Scanner man=new Scanner(System.in);
boolean a,b,c;
int A,B,C; //正しい暗証番号 1111
String an,kaku,nokaku;
char j;

j='\n'; an="暗証番号を入力してください。"; kaku="暗証番号が確認できました。"; nokaku="暗証番号が確認できません。もう一度"; a=true; b=true; c=true; System.out.println(an); while(a){ A=man.nextInt(); if(A==1111){ System.out.println(kaku+j+"プログラムを終了します。"+j); a=false; } if(a){ System.out.println(nokaku+an); } } System.out.println("プログラム起動"+j+"2つ目の"+an); while(b){ B=man.nextInt(); if(B==2222){ System.out.println(kaku+j+"2つ目の暗証番号が確認できたのでプログラムを終了します。"+j); b=false; } if(b){ System.out.println(nokaku+an); } } System.out.println("プログラム起動"+j+"3つ目の"+an); while(c){ C=man.nextInt(); if(C==3333){ System.out.println(kaku+j+"3つ目の暗証番号が確認できたのでプログラムを終了します。"); c=false; } if(c){ System.out.println(nokaku+an); } }

投稿2015/10/17 15:36

nonono

総合スコア13

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

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

swordone

2015/10/17 15:42

なんか最初の仕様からいきなりかけ離れてませんか? それから実用上これで問題ないとしても,この書き方は後から読み返したりする際に難解になるので,もう少し書き方考えたほうがいいと思いますよ. 「正しい暗証番号が入力された状態」がfalseと言うのは直感に反するので.
nonono

2015/10/17 17:54

汚いコードで、どうもすみません(平謝り) まだまだ素人なもので少しでも早く覚えたいので無駄に変数とか入れてます。 どうせ幼稚園児レベルのゴミクズなのでfalseでしか書けなくてごべん”な”ざい” 正しい暗証番号が入力された状態」がfalseと言うのは直感に反するので←素人なのでこれが精一杯です。すみません 今後は綺麗なコードを書けるように心がけていきます。 どうも、すみませんでしたー(土下座)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問