Java 我的程序没有打印预期的输出
这是给我的作业: 编写一个程序,要求用户输入一个整数,然后逐个输出该整数的数字。例如,如果用户输入2017,则程序应输出“您的数字是2、0、1和7”。使用堆栈执行此操作 我已经实现了我的算法来完成这项任务,但是,每当我打印从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
提取数字\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,