Paizaラーニングのレベルアップ問題集AランクレベルアップメニューJava編・「座標系での向きの変わる移動」という問題に取り組んでいるのですが、Scannerで取得した文字列の値がおかしいです。
4枚目の画像の
-18 45 6
L
L
R
R
L
R
という入力を下記のコードで読み込んだとき、本来6番目に”R”と取得されるべきところが”L”で取得されているようです。
最後の文字だけ改行がないのが原因と思い、ループ内に分岐を作ってみたり、nextLine()をnext()にしてみたり色々と試してみたのですが、原因がわかりません。
ご教授いただけると幸いです。
↓Eclipseで動かしているコード↓
Java
1package practice0920; 2import java.util.Scanner; 3 4public class PracticeFinal { 5 public static void main(String[] args) { 6 7 Scanner sc = new Scanner(System.in); 8 int x = sc.nextInt(); //最初の位置のx座標 9 int y = sc.nextInt(); //最初の位置のy座標 10 int n = sc.nextInt(); //移動の回数 11 sc.nextLine(); //行送り 12 13 int newX = x; //移動後のx座標 14 int newY = y; //移動後のy座標 15 16 String hougaku = "N"; //方角(初期値は北) 17 String muki = ""; //向いている向き 18 19 for(int i = 0; i < n; i++){ 20 21 if(i < n - 1) { 22 muki = sc.nextLine(); 23 }else if(i == i - 1) { 24// sc.nextLine(); 25 muki = sc.next(); 26 } 27 28 System.out.println(muki + " " + hougaku); //デバッグ用 29 30 31 if(hougaku.equals("N")){ //hougakuが"N"のとき 32 if(muki.equals("R")){ //mukiが"R"なら、 33 newX++; //newXの座標を右に1進める 34 hougaku = "E"; //hougakuを"E"(東)にする 35 }else if(muki.equals("L")){ 36 newX--; 37 hougaku = "W"; 38 } 39 40 }else if(hougaku.equals("S")){ 41 if(muki.equals("R")){ 42 newX--; 43 hougaku = "W"; 44 }else if(muki.equals("L")){ 45 newX++; 46 hougaku = "E"; 47 } 48 49 }else if(hougaku.equals("E")){ 50 if(muki.equals("R")){ 51 newY++; 52 hougaku = "S"; 53 }else if(muki.equals("L")){ 54 newY--; 55 hougaku = "N"; 56 } 57 58 }else if(hougaku.equals("W")){ 59 if(muki.equals("R")){ 60 newY--; 61 hougaku = "N"; 62 }else if(muki.equals("L")){ 63 newY++; 64 hougaku = "S"; 65 } 66 67 } 68 69 System.out.println(newX + " " + newY); //移動先のx座標とy座標を出力する 70 71 } 72 73 } 74}
★9月26日追記★
Java
1 }else if(i == n - 1) { //一番最後の値を取得するとき 2 3 if(sc.hasNext()) { 4 muki = sc.next(); 5 } 6 7 }
というようにhasNext()で次の入力があるかどうか調べるif文を追加したところ、何故か正しい値を取得出来るようになり、paizaのチェックを通過しました。
eclipseのコンソール上での挙動が安定していないため(4行目と5行目の間に空白行が挿入される、Enterキーを押さないと最後の値を取得しない)、他に良い書き方があればご教授お願いします。
回答3件
あなたの回答
tips
プレビュー