Java 我的程序没有打印预期的输出

Java 我的程序没有打印预期的输出,java,stack,Java,Stack,这是给我的作业: 编写一个程序,要求用户输入一个整数,然后逐个输出该整数的数字。例如,如果用户输入2017,则程序应输出“您的数字是2、0、1和7”。使用堆栈执行此操作 我已经实现了我的算法来完成这项任务,但是,每当我打印从提取数字\u堆栈方法返回的结果时,输出是空的,即没有打印到控制台。有人知道为什么会这样吗 import java.util.Scanner; import java.util.Stack; public class Extract_Digits { //main me

这是给我的作业:

编写一个程序,要求用户输入一个整数,然后逐个输出该整数的数字。例如,如果用户输入2017,则程序应输出“您的数字是2、0、1和7”。使用堆栈执行此操作

我已经实现了我的算法来完成这项任务,但是,每当我打印从
提取数字\u堆栈
方法返回的结果时,输出是空的,即没有打印到控制台。有人知道为什么会这样吗

import java.util.Scanner;
import java.util.Stack;

public class Extract_Digits 
{
  //main method
  public static void main(String[] args) 
  {
    Scanner scanner = new Scanner(System.in);
    System.out.printf("Enter an integer : ");
    String inputString = scanner.nextLine();

    if (inputString == null || inputString.length() == 0) 
    {
      System.out.println("Enter the valid integer :");
      return;
    }
    String digits = extract_Digits_Stack(inputString);
    System.out.printf(digits);
  }
  private static String extract_Digits_Stack(String inputString) 
   {
     String[] arrString = inputString.split("");
     Stack<String> stack = new Stack<String>();
     for(String input : arrString) 
     {
            stack.push(input);
     }
    StringBuilder builder = new StringBuilder();
    return builder.toString();
  }
}
import java.util.Scanner;
导入java.util.Stack;
公共类抽取数字
{
//主要方法
公共静态void main(字符串[]args)
{
扫描仪=新的扫描仪(System.in);
System.out.printf(“输入一个整数:”);
String inputString=scanner.nextLine();
if(inputString==null | | inputString.length()==0)
{
System.out.println(“输入有效整数:”);
返回;
}
字符串数字=提取\u数字\u堆栈(inputString);
系统输出打印F(数字);
}
私有静态字符串提取\u数字\u堆栈(字符串输入字符串)
{
String[]arrString=inputString.split(“”);
堆栈=新堆栈();
for(字符串输入:arrString)
{
stack.push(输入);
}
StringBuilder=新的StringBuilder();
返回builder.toString();
}
}

这将返回一个空字符串。

代码中存在一些错误/未完成的实现

  • 考虑到
    堆栈
    是后进先出的数据结构,在将参数
    inputString
    推到
    堆栈
    之前,将其反转是有意义的。i、 e如果用户输入
    2017
    ,我们会将其反转为
    7102
    ,然后
    push()
    将其放入
    堆栈中
  • 例如:

    2  // the forth item pushed to the stack <--- top of stack
    0  // the third item pushed to the stack
    1  // the second item pushed to the stack
    7 // the first item pushed to the stack  <--- bottom of stack
    
    StringBuilder builder = new StringBuilder();
    builder.append("your digits are: ");
    for (int i = 0; i < inputString.length(); i++) {
         if(i == inputString.length()-1) builder.append(" and ");
         builder.append(stack.pop());
         if(i < inputString.length()-2) builder.append(",");
    }
    return builder.toString();
    
    现在进入实施阶段:

    private static String extract_Digits_Stack(String inputString)
    {
            String[] arrString = new StringBuilder(inputString).reverse().toString().split("");
            Stack<String> stack = new Stack<String>();
    
            for(String input : arrString)
            {
                stack.push(input);
            }
    
            StringBuilder builder = new StringBuilder();
            builder.append("your digits are: ");
            for (int i = 0; i < inputString.length(); i++) {
                if(i == inputString.length()-1) builder.append(" and ");
                builder.append(stack.pop());
                if(i < inputString.length()-2) builder.append(",");
            }
            return builder.toString();
    }
    
    更改此项:

    String[] arrString = inputString.split("");
    
    为此:

    String[] arrString = new StringBuilder(inputString).reverse().toString().split("");
    
  • 您将返回一个空的
    StringBuilder
    ,因此让我们让它做一些有用的工作
  • 例如:

    2  // the forth item pushed to the stack <--- top of stack
    0  // the third item pushed to the stack
    1  // the second item pushed to the stack
    7 // the first item pushed to the stack  <--- bottom of stack
    
    StringBuilder builder = new StringBuilder();
    builder.append("your digits are: ");
    for (int i = 0; i < inputString.length(); i++) {
         if(i == inputString.length()-1) builder.append(" and ");
         builder.append(stack.pop());
         if(i < inputString.length()-2) builder.append(",");
    }
    return builder.toString();
    
    注意-通常您应该使用方法来确定
    堆栈中是否仍有元素。我在这里使用
    for
    循环的唯一原因就是在对元素执行
    pop()
    操作时组织输出。当然,还有其他方法可以达到同样的结果

    完整方法实现:

    private static String extract_Digits_Stack(String inputString)
    {
            String[] arrString = new StringBuilder(inputString).reverse().toString().split("");
            Stack<String> stack = new Stack<String>();
    
            for(String input : arrString)
            {
                stack.push(input);
            }
    
            StringBuilder builder = new StringBuilder();
            builder.append("your digits are: ");
            for (int i = 0; i < inputString.length(); i++) {
                if(i == inputString.length()-1) builder.append(" and ");
                builder.append(stack.pop());
                if(i < inputString.length()-2) builder.append(",");
            }
            return builder.toString();
    }
    
    私有静态字符串提取\u数字\u堆栈(字符串输入字符串)
    {
    String[]arrString=newstringbuilder(inputString).reverse().toString().split(“”);
    堆栈=新堆栈();
    for(字符串输入:arrString)
    {
    stack.push(输入);
    }
    StringBuilder=新的StringBuilder();
    append(“您的数字是:”);
    对于(int i=0;i
    您没有向
    StringBuilder
    添加任何内容,因此在打印时当然不会得到任何输出。创建堆栈并将输入中的每个字符存储到堆栈中之后,您应该做的是从堆栈中一次弹出一个字符以生成输出消息。但是,这其中的一个问题是将字符存储到堆栈中的顺序。您从输入开始到结束都在存储字符。相反,您应该从输入结束到开始存储字符,如下所示

    String[] arrString = inputString.split("");
    Stack<String> stack = new Stack<String>();
    for(int i = arrString.length - 1; i >= 0; i--) 
    {
        stack.push(arrString[i]);
    }
    return stack;
    
    String[]arrString=inputString.split(“”);
    堆栈=新堆栈();
    对于(int i=arrString.length-1;i>=0;i--)
    {
    stack.push(arrString[i]);
    }
    返回栈;
    
    因此,当进入2017年时,堆栈现在看起来是这样的

    2 <-top of stack
    0
    1
    7 <-bottom of stack
    

    2使用后
    push
    要将项目推到堆栈顶部,您应该使用
    pop
    删除堆栈顶部的元素并返回此值,这些值可以使用
    append
    添加到
    StringBuilder

    private static String extract_Digits_Stack(String inputString) {
        //To print in the same order as it is entered
        //String[] arrString = new StringBuilder(inputString).reverse().toString().split("");
        String[] arrString = inputString.split("");
        Stack<String> stack = new Stack<String>();
    
        for (String input : arrString) {
            stack.push(input);
        }
    
        StringBuilder builder = new StringBuilder();
        builder.append("The digits are: ");
        while (!stack.empty()) {
            builder.append(stack.pop() + ","); // Here append the elements
        }
        return builder.toString();
    }
    

    请学习如何使用调试器。添加有关该问题的更多详细信息。实际上,你的问题读起来很像“给我安排家庭作业”。请阅读并初始化
    StringBuilder
    并返回它,而不给它任何值?另外
    extract\u Digits\u Stack
    的返回类型没有任何意义。忽略您指出的问题,看起来OP正确地分离了整数,但随后将它们重新组合在一起(返回原始字符串)。也许列表或数组更合适。
    private static String extract_Digits_Stack(String inputString) {
        //To print in the same order as it is entered
        //String[] arrString = new StringBuilder(inputString).reverse().toString().split("");
        String[] arrString = inputString.split("");
        Stack<String> stack = new Stack<String>();
    
        for (String input : arrString) {
            stack.push(input);
        }
    
        StringBuilder builder = new StringBuilder();
        builder.append("The digits are: ");
        while (!stack.empty()) {
            builder.append(stack.pop() + ","); // Here append the elements
        }
        return builder.toString();
    }
    
    The digits are: 7,1,0,2,