【问题标题】:Reversing a String from user's input从用户输入中反转字符串
【发布时间】:2019-11-19 21:17:27
【问题描述】:

我已经编写了代码来提示用户输入一个将被系统反转显示的句子。我已经在一些帮助下管理了它,但我现在很难评论我的代码来解释它的每一部分。我有点明白我做了什么,但我觉得我没有掌握每一行的“为什么”。

任何人都可以帮助我的 cmets 吗?

public static void main(String[] args) {
    // TODO Auto-generated method stub

    String original = "", reverse = ""; // Setting the strings values
    Scanner in = new Scanner(System.in); // Scanner is equal to input from user

    while(!original.contains("exit"))
    // As long as user does not input "exit", user will be prompt to enter a sentence
    {
        original = "";
        reverse = "";
        System.out.println("Enter a sentence to be reversed: ");
        original = in.nextLine(); // Setting "original" to be equal to user's input

        int length = original.length(); // Getting user's input character length (original)
        for (int i = length - 1; i >= 0; i--) // Getting input from the last character to be reversed
        reverse = reverse + original.charAt(i); //Setting "reverse" to the input "original" characters

        System.out.println(reverse); // Printing the input reversely
    }

}

最模糊的部分是:

for (int i = length - 1; i >= 0; i--)

还有:

reverse = reverse + original.charAt(i);

【问题讨论】:

  • 使用调试器并通过少量测试输入单步调试代码。
  • For loop** - 从字符串的最后一个字符开始循环遍历字符串的每个字符。 reverse** - 附加每个字符以形成新字符串。我建议使用StringBuilder 而不是String concatenation

标签: java reverse charat


【解决方案1】:

下面是对正在发生的事情的解释。

public static void main(String[] args) {
    String original = "", reverse = ""; // Create empty variables to hold the input and output
    Scanner in = new Scanner(System.in); // Create an object to read from StdIn

    while(!original.contains("exit"))
    // Read from StdIn as long as user does not input "exit"
    {
        original = "";
        reverse = "";
        System.out.println("Enter a sentence to be reversed: ");
        original = in.nextLine(); // Save the user's input as "original"

        int length = original.length(); // Get the length of the input
        for (int i = length - 1; i >= 0; i--) // Iterate over each character of the input, starting from the end until you reach the beginning and add the character to the "reverse" string
        reverse = reverse + original.charAt(i); 

        System.out.println(reverse); // Output the result
    }
}

用两个单独的 cmets 来解释 for 循环没有多大意义,因为两行中的每一行没有另一行就毫无意义。

【讨论】:

  • 谢谢你,这对分解事情很有帮助。
【解决方案2】:

好吧,让我们用“HELLO”作为输入来看看它。您可以看出,字符串的长度为 5,第一个字母 (H) 的索引为 0,第二个字母为 1,...最后一个字母的索引为 4,顺便说一句。是length -i。 循环for (int i = length - 1; i >= 0; i--) 从最后一个字母开始,然后是倒数第二个,依此类推,并将每个字母以相反的顺序附加到反向字符串。一般来说,在循环中,您将执行以下操作:

  • reverse = reverse + original.CharAt(4) => 反向='O'
  • reverse = reverse + original.CharAt(3) => reverse='OL'
  • reverse = reverse + original.CharAt(2) => reverse='OLL'
  • reverse = reverse + original.CharAt(1) => reverse='OLLE'
  • reverse = reverse + original.CharAt(0) => reverse='OLLEH'

【讨论】:

  • 谢谢,长度 - 1 有点令人困惑,尽管我的理解与事实相差不远。这很有帮助。谢谢!
  • 如果有帮助,您可以考虑投票赞成这个答案,这实际上是堆栈溢出背后的想法。
  • 您好@agim,抱歉,并不是不尊重,我开始使用这个平台,因为我也开始使用Java。这一切都不熟悉。再次感谢。
【解决方案3】:

了解

for (int i = length - 1; i >= 0; i--)
reverse = reverse + original.charAt(i);

你应该重新格式化成什么样子

for (int i = length - 1; i >= 0; i--)
    reverse = reverse + original.charAt(i);

for (int i = length - 1; i >= 0; i--) {
    reverse = reverse + original.charAt(i);
}

表示获取当前存储在reverse 变量中的内容并在末尾添加一个新字符+ original.charAt(i)。这会产生一个新的String,它被分配回reverse 变量,覆盖之前的内容,就像他的回答中提到的@agim 一样。

这里有一些您可以考虑的其他选择。尤其是使用StringBuilder,因为它内置了reverse() 函数,如果你想逐个字符地反转句子。

import java.util.*;

public class JavaFiddle
{
  public static void main(String[] args)
  {
    String sentence = "The quick brown fox jumps over the lazy dog";

    // Print sentence forward
    System.out.println(sentence);

    // Print sentence backwards by words
    String[] words = sentence.split(" ");
    for (int i = words.length - 1; i >= 0; i--) {
      System.out.print(words[i] + " ");
    }
    System.out.println();

    // Print sentence backwards by character
    for (int i = sentence.length() - 1; i >= 0; i--) {
      System.out.print(sentence.charAt(i));
    }
    System.out.println();

    // Print sentence backwards by character using StringBuilder;
    StringBuilder reverseSentence = new StringBuilder(sentence);
    System.out.println(reverseSentence.reverse());
  }
}

结果

The quick brown fox jumps over the lazy dog
dog lazy the over jumps fox brown quick The 
god yzal eht revo spmuj xof nworb kciuq ehT
god yzal eht revo spmuj xof nworb kciuq ehT

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多