Chrono Failz Ответов: 2

Напишите программу, чтобы принять предложение и перепечатать все предложение, только с теми словами в обратном порядке, длина которых Четна.


Привет,
Я столкнулся с проблемой при написании следующей программы:
Напишите программу, чтобы принять предложение и перепечатать все предложение, только с теми словами в обратном порядке, длина которых Четна.
Входной Сигнал Образца:
JAVA - это язык программирования.
желаемый результат:
AVAJ si a Программирование egaugnal

Что я уже пробовал:

<pre>import java.util.*;
class Evenlength
{
    public static void main()
    {
        Scanner sc=new Scanner(System.in);
        String s1="",s2="";
        System.out.println("enter");
        String s=sc.nextLine();
        char ch;
        s1=s1+s;
        for(int i=0;i<s.length();i++)
        {
         ch=s.charAt(i);
         if(ch!=' ')
         {
             s1=ch+s1;
             s2=s2+ch;
            }
            else
            {
                int q=s1.length();
                if(q%2==0)
                System.out.println(s1);
                else
                System.out.println(s2);
                s1="";
                s2="";
                
            }
         }
    }
    }


Теперь о выходе:
входить
JAVA - это язык программирования
AVAJJAVA - это язык программирования
си
один
программирование


Пожалуйста, помогите мне, предоставив конкретное решениеПожалуйста, воздержитесь от предоставления мне ссылок или подобных программ и, пожалуйста, просто исправьте ошибки в программе, чтобы она давала желаемые результаты .

С уважением,
Хроно

2 Ответов

Рейтинг:
4

Patrice T

Самая очевидная ошибка-это

System.out.println(s1);

он переходит на новую строку после печати s1.

Как программист, вы должны уметь понимать и корректировать свой собственный код, отладчик-это инструмент rge, который вам поможет.
Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
19

OriginalGriff

Нет.
Компиляция не означает, что ваш код верен! :смеяться:
Подумайте о процессе разработки как о написании электронного письма: успешная компиляция означает, что вы написали электронное письмо на правильном языке - например, на английском, а не на немецком, - а не то, что письмо содержало сообщение, которое вы хотели отправить.

Итак, теперь вы входите во вторую стадию разработки (на самом деле это четвертая или пятая, но вы перейдете к более ранним стадиям позже): тестирование и отладка.

Начните с рассмотрения того, что он делает, и как это отличается от того, что вы хотели. Это важно, потому что это дает вам информацию о том, почему он это делает. Например, если программа предназначена для того, чтобы позволить пользователю ввести число, а затем удвоить его и напечатать ответ, то если бы ввод / вывод был таким:

Input   Expected output    Actual output
  1            2                 1
  2            4                 4
  3            6                 9
  4            8                16
Тогда совершенно очевидно, что проблема заключается в бите, который удваивает его - он не прибавляет себя к себе или умножает его на 2, он умножает его на себя и возвращает квадрат входного сигнала.
Таким образом, вы можете посмотреть на код, и очевидно, что он находится где-то здесь:
private int Double(int value)
   {
   return value * value;
   }

Как только у вас появится идея, что может пойти не так, начните использовать отладчик, чтобы выяснить, почему. Поставить точку останова на строке:
s1=s1+s;

и запустите свое приложение. Подумайте о том, что должна делать каждая строка кода перед ее выполнением, и сравните это с тем, что она на самом деле делала, когда вы использовали кнопку "Step over" для выполнения каждой строки по очереди. Он сделал то, что вы ожидали? Если да, то переходите к следующей строке.
Если нет, то почему? Чем это отличается?

Это навык, и его стоит развивать, поскольку он помогает вам как в реальном мире, так и в развитии. И, как и все навыки, он только улучшается при использовании!

Да, я, вероятно, мог бы сказать вам, в чем "проблема" - но это не трудно сделать самому, и вы узнаете что-то действительно стоящее в то же время!


Chrono Failz

Правда в том,что сейчас я нахожусь в затруднительном положении со временем,вот почему я попросил конкретное решение, так что, пожалуйста, хотя бы расскажите мне о моей проблеме.Я могу исправить программу,узнав это сам, так что, пожалуйста!

OriginalGriff

Нет, потому что ты этого не сделаешь.
Если вы "попали в неприятную ситуацию со временем" на таком простом задании, как это, то вам будет еще труднее со следующим заданием, если вы не усвоите уроки, которые преподает вам этот - и вы учитесь, делая, а не глядя на чужой код.

И это игнорирование того, что было бы несправедливо по отношению к остальной части класса, если бы вы получили оценку за домашнее задание, основанную на работе, которую вы не сделали.

Возьмите отладчик и начните смотреть на то, что происходит: это важная часть задачи, поэтому чем раньше вы начнете, тем быстрее закончите.

Chrono Failz

Спасибо за Ваши советы.Хотя я не использовал отладчик так, как использую BlueJ.
Я рассмотрел строку, о которой Вы говорили в своем первом ответе, и сделал программу, состоящую исключительно из этой функции, и понял свою ошибку.
Кроме того, меня переполняет огромное чувство удовлетворения, которого, возможно, не было бы, если бы вы сразу же дали мне мою проблему.
Наверное, ты прав. :)
В то же время я узнал кое-что стоящее.

OriginalGriff

Молодец!
Я рад это слышать - Счастливого вам Нового года.

Chrono Failz

То же самое касается тебя и твоей семьи.