Java:空时停止输入

时间:2018-11-07 07:52:20

标签: java java.util.scanner

在我的程序中,即时通讯会读取数字和符号,直到用户给我们空行。 编辑:基本上程序应该模拟从堆栈(10个元素的数组)中添加/删除数字,并且有两个基本操作(添加:+和下一行中的数字并起飞:对于每个成功添加的数字,程序应该打印:)不可能(超出数组范围)print::(为了可能的删除,打印数字;(如下所示)

*SAMPLE:*

INPUT:
+
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
0
+
1
-
-
-
-
-
-
-
-
-
-
-
OUTPUT:
:)
:)
:)
:)
:)
:)
:)
:)
:)
:)
:(
0
9
8
7
6
5
4
3
2
1
:(
import java.util.*;
public class Zadanie3 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
     Scanner input = new Scanner(System.in);
     String znak;

     char helper;
     int stack[]=new int[10];

     int i =-1;
     List<String> outcome = new ArrayList<>();


    while (input.hasNext()){

        znak=input.nextLine();
        if(znak.isEmpty()){
            break;
        }

        if(znak.charAt(0)=='+' && i<9){
            znak=input.nextLine();
            if(znak.isEmpty()){
                break;
            }
        i++;
        stack[i]=Integer.parseInt(znak);
        outcome.add(":)");

        }else if(znak.charAt(0)=='-' && i>=0 && i<=9){
        outcome.add(String.valueOf(stack[i]));
        i--;
        }
        else{
            outcome.add(":(");

        }
        znak=input.nextLine();

        if(znak.isEmpty()){
            break;
        }

        if(znak.charAt(0)=='+' && i<9){
            znak=input.nextLine();
            if(znak.isEmpty()){
                break;
            }
        i++;
        stack[i]=Integer.parseInt(znak);
        outcome.add(":)");

        }else if(znak.charAt(0)=='-' && i>=0 && i<=9){
        outcome.add(String.valueOf(stack[i]));

        i--;

        }

        else{
            outcome.add(":(");
        }

        }


    for(String s: outcome) {
        System.out.println(s);
    }









}

}

输入空行后,输入仍然不会停止-我尝试过在while和if的时候使用input.isEmpty(),但它也无法正常工作。当在几个值之后给出反应时,我改为留空。从while移除hasNext()并替换为isEmpty(),Equals()得到相同的结果。)

2 个答案:

答案 0 :(得分:2)

要考虑一个小的实际例子

/json

答案 1 :(得分:0)

多个位置中的while循环内将代码从if(znak.equals(""))更改为if(znak.isEmpty()),以打破循环并删除&& !input.equals("")循环中的条件while ,我认为出现这种情况没有道理。

尝试以下

import java.util.*;
public class Zadanie3 {
public static void main(String[] args) {
        // TODO Auto-generated method stub
         Scanner input = new Scanner(System.in);
         String znak = input.nextLine();
         if(znak.isEmpty()){                               
                System.exit(0);                     
            }
         char helper;
         int stack[]=new int[10];

         int i =-1;
         List<String> outcome = new ArrayList<>();


        while (input.hasNext() ){

            znak=input.nextLine();
            if(znak.isEmpty()){
                break;
            }

            if(znak.charAt(0)=='+' && i<9){
                znak=input.nextLine();
            if(znak.isEmpty()){
                break;
            }
            i++;
            stack[i]=Integer.parseInt(znak);
            outcome.add(":)");

            }else if(znak.charAt(0)=='-' && i>=0 && i<=9){
            outcome.add(String.valueOf(stack[i]));
            i--;
            }
            else{
                outcome.add(":(");

            }
            znak=input.nextLine();

            if(znak.isEmpty()){
                break;
            }

            if(znak.charAt(0)=='+' && i<9){
                znak=input.nextLine();
            if(znak.isEmpty()){
                break;
            }
            i++;
            stack[i]=Integer.parseInt(znak);
            outcome.add(":)");

            }else if(znak.charAt(0)=='-' && i>=0 && i<=9){
            outcome.add(String.valueOf(stack[i]));

            i--;

            }

            else{
                outcome.add(":(");
            }

            }


        for(String s: outcome) {
            System.out.println(s);
        }



    }

}