import java.util.Scanner;
import java.util.Random;
class test8{
public static void main(String[] args){
Scanner stdIn=new Scanner(System.in);
Random rand =new Random();
String[] s1={"January","February","March","April","May","June","July","August","September","October","November","December"};
System.out.println("英語の月名を入力してください。\nなお、先頭は大文字で、2文字目以降は小文字とします。");
int n,t;
do{
n=rand.nextInt(12); //nは0~11の乱数
boolean y=false;
while(y==false){
System.out.print(n+1+"月:");
String s2=stdIn.next();
if(s1[n].equals(s2)){
y=true;
}else{
System.out.println("違います。");
}
}
System.out.print("正解です。もう一度? 1…Yes, 2…No:");
t=stdIn.nextInt();
}while(t==1);
System.out.println("終了です。");
}
}
これは正しいプログラムなのですが、
String s2=stdIn.next();
の next() の部分を nextLine() に変えると、
[実行例]
英語の月日を入力してください。
なお、先頭は大文字で、2文字目以降は小文字とします。
11月:November
正解です。もう一度? 1…Yes, 2…No:
1
2月:違います
2月:
という風に、なぜか
2月:違います
という一文が無駄に表示されてしまいます。
なぜなんでしょうか。。
No.1
- 回答日時:
今回のと同じ疑問みたいですね。
なぜ、String s = sc.nextLine(); が入力待ちにならないんですかね。。
ベストアンサーに選ばれてる解答読んでもよく分からないですorz(汗
No.3
- 回答日時:
そう, 「[ENTER] を押した」はずですよね. 「[ENTER] を押す」ということは, 「'\n' という文字を入力する」ということです.
その '\n' が stdIn.nextInt() でどうなるかを考えてください.
int x=sc.nextInt();
で、たとえば2を押してEnter(すなわち改行)を押すと、
scannerは2を読み込んで、
String s=sc.nextLine();の所に来た時点で前回読み込んだ行の次の行をスキャンする?
ということですが、すでにその行は空行なので、入力待ちせずに空行を読み込んだということでしょうか。
つまり、nextLine()メソッドというのはこのプログラム(リンク先の質問者のプログラム)で説明するなら
「前回で読み込んだときにあるスキャナの位置の次の行を読み込む」
ということですかね?
それで次の行はすでに入力されているので、入力待ちにならないということでしょうか?
No.4
- 回答日時:
ま~ある意味「nextLine」って名前が悪いんだけどね.... #1 のリンク先にもあるんですが, nextLine で返ってくるのは「現在行の残り」なんです.
2[ENTER]
という入力に対して nextInt を呼び出すと「2」が得られるんだけど, 「入力を終わらせるため」の [ENTER] 自体は消えません. だから, ここで nextLine を呼び出すといきなり [ENTER] を見付けて「これで行が終わった」とばかりいきなり返ってきます.
何度も質問してごめんなさい(汗
次のような場合(両方ともnextLine()メソッド)はうまくいくのですが、
これも最初のnextLineの所で文字入力して[Enter]を押して[Enter]自体は消えず、2つ目のnextLineが
[Enter]見つけるから2つめのnextLineで入力待ちしないと思ったのですが、
この場合はどういうわけなのでしょうか?
import java.util.Scanner;
class test7{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("sを入力してください");
String s = sc.nextLine();
System.out.println("s=" + s);
System.out.print("tを入力してください");
String t = sc.nextLine();
System.out.println("t=" + t);
}}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Ruby vscode 文字化け 1 2022/05/21 19:17
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- Perl perlについての質問 2 2022/10/17 15:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインターに関する警告
-
[JAVA]try 内の変数を外で!?
-
JSPやサーブレットでSystem.out...
-
JAVA 文字色変更
-
改行の判定方法
-
曜日の取得方法を教えて下さい!
-
JAVAのDouble型の小数点以下の...
-
EclipseでJava
-
vb6 オブジェクトライブラリは...
-
文字列の引き算
-
NaNではなく、0と表示させたい
-
文字列の置換について。
-
java教えてください。
-
コマンドプロンプトに不正な文...
-
教えてほしいです。
-
Javaについて質問です Javaで 1...
-
Javaでカレントディレクトリを...
-
nullcline
-
LC発振回路-ループ利得
-
JAVAのエラーの意味が分かりま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインターに関する警告
-
[JAVA]try 内の変数を外で!?
-
JSPやサーブレットでSystem.out...
-
JAVAのDouble型の小数点以下の...
-
EclipseでJava
-
「続行するには何かキーを押し...
-
文字列の引き算
-
java シンボルが見つかりません...
-
JAVA 文字色変更
-
改行の判定方法
-
JAVAのエラーの意味が分かりま...
-
Javaのコマンドライン引数を使...
-
java教えてください。
-
曜日の取得方法を教えて下さい!
-
JavaにはなぜGO TO ...
-
Javaでカレントディレクトリを...
-
構文解析中にファイルの終わり...
-
JAVA 三角形の判定
-
複数行キーボード入力した後に...
-
printfの%fにおいて教本どおり...
おすすめ情報