Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用堆栈反转单词_Java - Fatal编程技术网

Java 用堆栈反转单词

Java 用堆栈反转单词,java,Java,我对这里和编程都是新手。我试图单独学习其他主题,因为当我有问题时,我的导师没有足够的帮助,所以就这样。我想用通用堆栈反转一个单词 我的pop、push、isEmpty和peek方法都能工作(在我尝试这个方法之前,我用一个更简单的程序对它们进行了测试),输出结果似乎是一个字符一个字符地给我一个相反的单词,但在每个字符之前总是给我一个null 我的问题是: 为什么会这样?即使我有一个expandCapacity方法在容量为9时工作,但当输入超过限制时它不适用 这是我的密码 编辑:以下是我说过的行之

我对这里和编程都是新手。我试图单独学习其他主题,因为当我有问题时,我的导师没有足够的帮助,所以就这样。我想用通用堆栈反转一个单词

我的pop、push、isEmpty和peek方法都能工作(在我尝试这个方法之前,我用一个更简单的程序对它们进行了测试),输出结果似乎是一个字符一个字符地给我一个相反的单词,但在每个字符之前总是给我一个null

我的问题是: 为什么会这样?即使我有一个expandCapacity方法在容量为9时工作,但当输入超过限制时它不适用


这是我的密码 编辑:以下是我说过的行之有效的方法。
@覆盖
公共无效推送(T元素)
{
if(count==stack.length){
扩展容量();
}
堆栈[++计数]=元素;
//系统输出打印项次(计数);
}
@凌驾
公共字符串toString()
{
字符串结果=“\n”;
对于(int index=count-1;index>=0;index--){
结果+=堆栈[索引]+“\n”;
}
返回结果+“”;
}
@凌驾
公共布尔值为空()
{//检查数组是否为空
如果(计数=0){
System.out.println(“无”);
}
返回计数==0;
}
公共广播电台
{
T输出;
输出=(堆栈[count-1]);
计数--;
返回(输出);
}
@凌驾
公共T Peek()
{
//查看此堆栈顶部的对象而不删除它
//从堆栈中删除。
if(stack.length==0){
// {
System.out.println(“看不见鬼”);
}
返回(堆栈[--count]);
}
//否则
// {
//System.out.println(堆栈[count-1]);
// }
// }
@凌驾
公共整数大小()
{
//设置此向量的大小
if(stack.length==0){
System.out.println(“内部无任何内容”);
}
System.out.println(“数组的大小为:“+count”);
返回计数;
}
}
out
中的值为空

out = out + u;
// This is null = null + u;
因此,输出开始时为空

您只需创建一个新的字符串对象,以给出
out
初始值:

 private static String out = "";

我不确定您为什么需要
ExpandCapacity
位,这也适用:

public static void main(String[] args)
    {       

    String word ="reverse please";      
    Stack<Character> chStack = new Stack<Character>();      
    for (int i = 0; i < word.length(); i ++)
    {       
        chStack.push(word.charAt(i));       
    }

    String out = "";
    while (chStack.size() != 0)
    {
        out += chStack.pop();
        System.out.println(out);

    }               
}
publicstaticvoidmain(字符串[]args)
{       
String word=“请反向”;
堆栈chStack=新堆栈();
for(int i=0;i
这里有几个注意事项:

  • 您没有编写泛型类,所以请退出
  • 让迭代尽可能地进行下去
  • 尽可能多地尝试使用Java标准类,在本例中是堆栈而不是ArrayStack
  • 您不需要调整堆栈的大小,当您将更多数据放入堆栈时,它将动态处理其大小
  • 您应该在创建完字符串后编写它,而不是在每个步骤中编写一次
  • 使用+附加字符串效率非常低。使用StringBuilder
  • 使用使代码可读的方法
代码如下:

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

public class ReverseDriver {
  public static String reverse(String string) {
    Stack<Character> revStack = new Stack<Character>();
    for (char c : string.toCharArray()) {
      revStack.push(c);
    }
    StringBuilder builder = new StringBuilder();
    while(!revStack.isEmpty()){
      builder.append(revStack.pop());
    }
    return builder.toString();
  }

  public static void main(String[]args){
    Scanner input = new Scanner(System.in);
    System.out.println("Enter your sentence: ");
    String in = input.nextLine();
    System.out.println(reverse(in));
  }
}
import java.util.Scanner;
导入java.util.Stack;
公共类反向器{
公共静态字符串反转(字符串){
Stack revStack=新堆栈();
for(char c:string.toCharArray()){
revStack.push(c);
}
StringBuilder=新的StringBuilder();
而(!revStack.isEmpty()){
append(revStack.pop());
}
返回builder.toString();
}
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入您的句子:”);
字符串in=input.nextLine();
系统输出打印LN(反向(输入));
}
}

虽然我很感激你说它正在工作,但你能用expandCapacity和isEmpty方法给我们一些代码,让我们更深入地了解发生这种情况的原因:)你确定这是生成输出的同一个代码-“输入单词”还是“输入句子”注意:
expandCapacity
如果
in.length()
为10,则调用10次,这是故意的吗?另外,
in
out
在main中应该是局部变量,而不是静态变量(至少如果这是一个“真实”的程序)。是的,Philip,这是我的错,我编辑字符串并复制旧的Enter a句子,hyde完全正确地将它们设置为局部变量。我认为堆栈实现基于一个元素数组。expandCapacity用于在需要时增加阵列的大小。嗨,Chris,它确实可以完全工作,您对expandCapacity的看法是正确的,但是如果Stack类中的主类中有一个用于输入的参数,该怎么办?例如:Stack chStack=new Stack(word);怎么可能把它读成那样的字符串呢?当我尝试使用输入时,它只输出到有空格的时候。非常感谢你的帮助!我不太明白你在问什么?是否要从控制台读取要反转的单词?user366722的答案应该适用于此。谢谢。我不知道有一个字符串生成器应该更有用!我确实有方法,但它们是在不同的类抱歉,如果我不能描述。谢谢!我完全忘记out的工作原理类似于用于存储值和的count变量,但在本例中是字符串,但它需要赋值。非常感谢你。
out = out + u;
// This is null = null + u;
 private static String out = "";
public static void main(String[] args)
    {       

    String word ="reverse please";      
    Stack<Character> chStack = new Stack<Character>();      
    for (int i = 0; i < word.length(); i ++)
    {       
        chStack.push(word.charAt(i));       
    }

    String out = "";
    while (chStack.size() != 0)
    {
        out += chStack.pop();
        System.out.println(out);

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

public class ReverseDriver {
  public static String reverse(String string) {
    Stack<Character> revStack = new Stack<Character>();
    for (char c : string.toCharArray()) {
      revStack.push(c);
    }
    StringBuilder builder = new StringBuilder();
    while(!revStack.isEmpty()){
      builder.append(revStack.pop());
    }
    return builder.toString();
  }

  public static void main(String[]args){
    Scanner input = new Scanner(System.in);
    System.out.println("Enter your sentence: ");
    String in = input.nextLine();
    System.out.println(reverse(in));
  }
}