مساعدة في كتابة طريقة عكس الفراغ واستخدام العودية لعكس جملة كاملة (Java)

StackOverflow https://stackoverflow.com/questions/1869434

  •  18-09-2019
  •  | 
  •  

سؤال

لقد كتبت بالفعل شيئا يزيل الطابع الأول من السلسلة ويضعه بعد فرعية الباقي ثم يطبعه، وكانت التعليمات هي عكس الجملة باستخدام العودية عن طريق إزالة الحرف الأول من الجملة وتسلسلها إلى الأستبعد العكسي الباقي ، بمعنى آخر. "مرحبا" غلة "أولية". لكنني لا أعرف جزء العودية، أي مساعدة سيكون موضع تقدير، شكرا. هذا هو رمزي:

public class Sentence {

   private String sentence;

   public Sentence(String astring) {
      sentence = astring;
   }

   public void reverse(){

   String firstChar = sentence.substring(0,1);

   String remainingSen = sentence.substring(1,sentence.length());

   System.out.println(remainingSen+firstChar);  
  }
}
هل كانت مفيدة؟

المحلول

هل تفهم مفهوم العودية؟ إذا كان الأمر كذلك، فاكتشف القضية الأساسية (الحالة التي من شأنها أن تتوقف عن العودية) وما تريد القيام به في كل خطوة متكررة. تلميح: ستحتاج إلى طريقة متكررة تأخذ السلسلة المراد عكسها وإرجاع السلسلة العكسية. لن يتم التباين عن الإجابة على سؤال HW، ولكن يجب أن تبدأك.

تحرير: (واحد آخر تلميح) لا تحاول أن تجعل طريقة الفراغ العكسية () متكررة. هل استدعاء طريقة متكررة مختلفة، تعمل في الواقع في الواقع.

نصائح أخرى

رؤية أن هذه هي مهمة الواجبات المنزلية، سأقدم بعض تلميحات للبدء:

  • تستدعي طريقة التكرير نفسها للقيام بجزء من العمل
  • أ reverse() طريقة أخذ أ String يمكن أن تسمي الوسيطة وإعادة النسخة العكسية من السلسلة نفسها.
  • إذا قمت بإزالة الحرف الأول وأضفه إلى نهاية عكس اليسار، يتم عملك.

إذا كنت تعمل على تلميحات أعلاه، فيجب أن تحل مشكلتك :-)

بشكل عام، إذا كنت ترغب في كتابة وظيفة متكررة، فسوف تدعو الوظيفة داخل نفسه. علي سبيل المثال:

void fn() {
    fn() 
}

من الواضح أن هذا المثال سيكون حلقة لا حصر لها.

في حالتك، تريد استدعاء دالة عكسية مرارا وتكرارا حتى تصل إلى حالة محددة (حيث يتم تحويل Hello إلى Olleh).

public class Sentence {

  private String sentence;

  // ... etc ...

  public void reverse() {
      // Base Case: When do you want this to end? This statement is designed
      // to end the recursion when a desired state is reached

      // some sort of string manipulation (which you have already worked on)

      // call reverse() to continue the 'looping' until 
      // a desired _case_ is reached
  }
}

أفترض أن هذا سؤال الواجبات المنزلية ومن المقرر قريبا، لذلك لن أقدم إجابة دقيقة ...

تحديث 1. : قمت بتعديل المثال العكسي لتتناسب مع القيود التي تم التعبير عنها.

public void reverse()
{
    if(text.length() > 0)
    {
        String first = text.substring(0,1);
        String remaining = text.substring(1);

        Sentence shorter = new Sentence(remaining);
        shorter.reverse();

        text = shorter.text + first;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top