前提・実現したいこと
標準入力を引数にしたScannerクラスについて、
下記のように、while文の条件式に「hasNext()」を使用したところ、
入力を待ち続け、ループから抜けることができませんでした。
このとき開発環境は、「Eclipse」を使用していたのですが、
「paiza.io」「AIZU ONLINE JUDGE」といった、
予め標準入力を設定し、実行する場合にはループが発生せず、実行することができました。
この現象は、「Eclipse」のコンソールのように、
エンターキーを入力したあとも、引き続き文字の入力が行える環境で、
発生する仕様という認識で正しいのでしょうか?
恐れ入りますが、ご教示頂けますと幸いです。
該当のソースコード
java
1import java.util.Scanner; 2 3public class Main { 4 static int[] s = new int[200]; // オペランド100個と演算子99個が収まる容量 5 static int top = 0; 6 static int max = 200; 7 8 public static void main(String[] args) { 9 Scanner sc = new Scanner(System.in); 10 11 while (sc.hasNext()) { 12 if (sc.hasNextInt()) { 13 int num = sc.nextInt(); 14 push(num); 15 16 } else { 17 String str = sc.next(); 18 int a = pop(); 19 int b = pop(); 20 21 switch (str) { 22 case "+": 23 push(b + a); 24 break; 25 26 case "-": 27 push(b - a); // LIFO(後入れ先出し) 28 29 break; 30 case "*": 31 push(b * a); 32 break; 33 } 34 } 35 } 36 System.out.println(pop()); 37 38 } 39 40 /* 配列によるスタックの実装 */ 41 42 private static void initialize() { 43 top = 0; 44 } 45 46 private static boolean isEmpty() { 47 return top == 0; 48 } 49 50 private static boolean isFull() { 51 return top >= max - 1; 52 } 53 54 private static void push(int x) { 55 if (!isFull()) { 56 top++; 57 s[top] = x; 58 } else { 59 System.err.println("容量オーバーです。"); 60 } 61 } 62 63 private static int pop() { 64 int ret = -1; 65 if (!isEmpty()) { 66 ret = s[top]; 67 top--; 68 } else { 69 System.err.println("中身が空です。"); 70 } 71 return ret; 72 } 73 74}
補足情報(FW/ツールのバージョンなど)
OS : macOS High Sierra (10.13.5)
IDE : Eclipse Oxygen.1a Release (4.7.1a)
JRE : 1.8.0_144
回答2件
あなたの回答
tips
プレビュー