Nabeel Munir Ответов: 1

Перебираем строки и переворачиваем их до тех пор, пока не останется 1 буква


Привет разработчикам Java,
Я не так уж стар на Яве и все еще нахожусь в периоде обучения.
Я практиковался в java и столкнулся с проблемой.
Описание приведено ниже.
Oliver and Lucy play game "Guess: which letter will be the last one?". Lucy names a guessed word and asks Oliver, which letter will be the last one. Rules of the games are the following:
(a) at first, remove every second letter, 
(b) then reverse the string of remaining letters (turn in backward order), 
(c) repeat steps a and b until single letter left. 
For example, when Lucy names word "KARTUPELIS", the wright answer is "I", because KARTUPELIS -> KRUEI -> IEURK ->  IUK -> KUI ->  KU -> IK ->  I. 
Write program that reads data from text file uzd9.in the given words; each word is written in separate line; maximum length of the word is 30 letters; word can include both uppercase, and lowercase Latin alphabet letters; the file contains no more than 100 words. The program must write the last remaind letter for each word after the gameplay in text file uzd9.out; each result in separate line. 
 
Example, Input data Wordsbefore.in KARTUPELIS BUMBA KURMIS SUNS
Output data wordsafter.out   I     A     K      N 
.
ниже приводится то, что я пробовал. Это вроде как работает, но я должен каждый раз преобразовывать слово в chararray, а затем запускать цикл через него. Это дает результат, но для меня это не очень хорошая практика. Я хочу запустить цикл через эти слова и продолжать работать до тех пор, пока во всех словах не останется ни одной буквы.
Пожалуйста, помогите мне, что я могу сделать, чтобы запустить цикл, который проходит через слова, делает свою работу и проверяет, осталась ли одна буква. если нет, то делает то же самое и продолжает делать, пока в каждом слове не останется одна буква.
"После выполнения приведенного ниже кода вывод, который я получаю, таков::"
"кюи"
У меня есть "картупели"в мой txt файл.

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

package com.io.java;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class buffered {

	public static void main(String[] args)
	{
		buffered b = new buffered();
		String textFile = "words.txt";
		b.readFile(textFile);
		String newstr = "";
	}
    public void readFile(String strFile) 
	{
		try (BufferedReader buffer = new BufferedReader(new FileReader(strFile)))
			{
				String strBuffer;
				while((strBuffer = buffer.readLine())  != null && strBuffer.length()>1)
				{
					String n = "";
					String newtr = "";
				    int k;
			        char[] c = strBuffer.toCharArray();
				    for( k=0; k<=c.length;k++)
					{
						if(k%2==0)
						{
							newtr+=c[k];
						}
					}
			       newtr = reverse(newtr);
			       c=newtr.toCharArray();
                  if(c.length>0)
                {
                 for(int j = 0; j<=c.length;j++)
                   {
                	   if(j%2==0)
                	   {
                		 n+=c[j];   
                	   }
                   }
                }
                  else
                  {
                	  break;
                  }
                  n = reverse(n);
                   System.out.println(n);
				}
				buffer.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
	public void writeFile(String strFile, String data)
	{
		try(BufferedWriter bwriter = new BufferedWriter(new FileWriter(strFile, true)))
		{
			bwriter.write(data);
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}
	public String reverse(String s)
	{
		s = new StringBuffer(s).reverse().toString();
		return s;
	}
}

Mohibur Rashid

Пожалуйста, определите "каждую секунду"

Nabeel Munir

Это означает, что программа должна быть закодирована таким образом, чтобы она удаляла каждую 2-ю(вторую) букву из слова. например, предположим, что у нас есть слово "картофель"
я напишу программу, которая удалит каждую вторую букву из этого слова. любить,
"ОАО" снимут и "ПТТ" будет слева, а затем и обратного оставшиеся буквы. Итак, ptt станет, ttp и снова уберет вторую букву и перевернет ее. после удаления каждой второй буквы из ttp у нас будет, tp и обратно снова получится, pt затем снова уберет вторую букву и мы останемся с p.
Я хочу сделать все эти шаги с помощью одного цикла.
Итак, я хочу написать программу, которая сначала удаляет каждое второе слово и переворачивает его, а затем проверяет, осталась ли одна буква, если нет, то возвращается к циклу и снова удаляет каждое второе слово, проверяет, осталась ли одна буква, и цикл продолжается до тех пор, пока не останется одна буква.

Nabeel Munir

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

1 Ответов

Рейтинг:
4

CPallini

Вы можете использовать, например, двойной связанный список (Java обеспечивает его, см. LinkedList (Java Platform SE 8 )[^]).
Другой возможный подход-работа с массивом символов, замена пробелами удаленных символов.


Maciej Los

5ed!

CPallini

Спасибо!