JML Posted December 8, 2009 at 11:57 PM Report Share #299410 Posted December 8, 2009 at 11:57 PM Boas a todos! Tenho um trabalho para ProgramaçãoI, em Java, e tenho algumas duvidas de como o resolver, se fosse possivel alguém me ajudar... O trabalho é: Pretende-se um programa que simule um editor de texto dos antigos, isto é, primeiro escreve-se o texto e só depois é que ele é formatado. O programa em questão deve ir lendo parágrafos, até um máximo de 5 ou até ser introduzido um parágrafo vazio. Depois pergunta qual o alinhamento pretendido: centrado, esquerda ou direita. O passo seguinte é pré-processar o texto eliminando todos os espaços em branco repetidos e no início e fim dos parágrafos. De seguida deve-se apresentar o texto formatado, assumindo-se que cada linha tem 80 caracteres (ter em conta que uma futura alteração deste valor deverá ser feita num só local). Cada linha deve ter por limites o sinal | e um espaço, isto é, cada linha deve começar com o “| “e terminada com “ |”. Estes caracteres não contam para o tamanho da linha. No final deve apresentar as seguintes estatísticas: número de parágrafos, número de linhas por parágrafo, número de palavras por parágrafo e quantas linhas e palavras tem o texto no total. Nas formatações, quando uma palavra não cabe numa linha deve passar para a linha seguinte. Neste momento as minhas grandes dúvidas são: ->Alinhar o texto à direita, centro e esquerda ( sem ser com métodos, e sem printf) ->Quando o texto introduzido está em branco como fazer para passar para o fim do programa ->Mudar de linha, quando introduzidos os 80 caracteres, sem partir uma palavra a meio cumprimentos , e desde já, obrigado Link to comment Share on other sites More sharing options...
Knitter Posted December 9, 2009 at 12:11 AM Report Share #299414 Posted December 9, 2009 at 12:11 AM Não indicaste se o programa é de consola ou gráfico. Suponho que seja de consola pelo que o alinhamento terá de ser feito com espaços/printfs. Verificar se estás na situação de terminar o programa, com introdução de um parágrafo vazio, vai depender de como estás a ler os dados. Existem várias formas de ler dados do teclado, algumas dão-te logo uma linha introduzida, pelo que podes ver se a linha é uma linha vazia, outros lêem os dados de forma mais limitada. Aqui vai depender muito dos métodos/classes que usares. Dividir em 80 caracteres vai, também, depender de como estás a fazer o código. Podes dividir todo o texto pelos espaços, em que ficas com um vector de palavras, e depois juntas as palavras de modo a não passar o tamanho indicado, ou podes percorrer a string que representa a linha e tentar dividir no tamanho indicado, se for um espaço cortas, se não for andas para trás até apanhares um espaço e cortas aí. Enfim, há muita forma de fazer o corte, estas duas foram apenas exemplos. www.sergiolopes.eu Link to comment Share on other sites More sharing options...
JML Posted December 9, 2009 at 06:53 PM Author Report Share #299520 Posted December 9, 2009 at 06:53 PM O programa é em consola, e nao posso utilizar os printf's :S Caso o paragrafo tivesse vazio, fiz o seguinte: { ln=input.nextLine(); while ((ln).length()==0) break;} { mas não dá :S Link to comment Share on other sites More sharing options...
Nuno_Martins Posted December 10, 2009 at 09:14 PM Report Share #299709 Posted December 10, 2009 at 09:14 PM Parece que temos o mesmo trabalho para fazer 😄 Knitter, Estamos a usar o Scanner para leitura de dados (pelo menos eu estou a fazer como aprendi nas aulas). Tipo isto: System.out.println("Introduza o paragrafo: "); String paragrafo1 = input.nextLine(); O problema é que o professor quer que nós coloquemos o texto todo de uma vez. Mas nós ao darmos enter (mudar de paragrafo) ele para de ler os dados. Há maneira de resolver isto? Quanto à questão do 80 caracteres por linha também pensei em usar o split() para partir pelos espaços e depois juntar as palavras. Só que para isso temos de criar um array, em que cada posição é uma palavra. Só que a partida não sabemos quantas palavras vamos ter, logo não sabemos as posições necessárias para o array. Há maneira de resolver também isto? Penso que estas são mesmo as partes mais complicadas do trabalho. Já agora, não tou a conseguir colocar o código aqui no fórum em java 😕 Como fazem? Link to comment Share on other sites More sharing options...
Knitter Posted December 10, 2009 at 11:30 PM Report Share #299749 Posted December 10, 2009 at 11:30 PM { ln=input.nextLine(); while ((ln).length()==0) break;} { Isto executa, no máximo 1 vez. Se ln estiver vazio, executa o while, cuja instrução é sair do while. Se ln não estiver vazio a condição do while falha e nada é executado. 😄 Podem alterar a detecção de um parágrafo para detectar apenas quando se carregarem duas vezes seguidas no enter. Isto é, quando introduzirem uma linha em branco mudam de parágrafo, quando introduzirem duas linhas terminam a introdução. Quanto ao número de palavras, o split devolve um vector com as palavras divididas, e mesmo que não devolvesse, não precisas do tamanho do vector para declarar um vector, tens é de o iniciar correctamente antes de o usares. O uso do Scanner é uma boa escolha. Deixo um extra que podem tentar usar: http://java.sun.com/docs/books/tutorial/i18n/text/boundaryintro.html Não tenho mais tempo, mas se puder, tentarei colocar aqui uns exemplos, isto sem fazer o trabalho por vós 😕 . www.sergiolopes.eu Link to comment Share on other sites More sharing options...
JML Posted December 11, 2009 at 11:59 PM Author Report Share #299971 Posted December 11, 2009 at 11:59 PM como centrar o texto de uma string? Link to comment Share on other sites More sharing options...
Knitter Posted December 12, 2009 at 12:34 PM Report Share #300004 Posted December 12, 2009 at 12:34 PM Em consola, não faço a menor ideia já que não podes usar espaços. Sendo uma consola não há posições que possas definir, só podes colocar caracteres, e neste caso apenas é possível usando espaços em branco, ou o espaço ou o tab. Sendo que só podes ter 80 colunas de texto sabes sempre qual é o tamanho da linha, se pegares no tamanho do texto, em letras, ficas com a fórmula para centrar o texto mas novamente, sem espaços não faço ideia de como o fazer. Nem sei se será possível usando a consola "normal". www.sergiolopes.eu Link to comment Share on other sites More sharing options...
SergioBarbosa Posted December 16, 2009 at 04:30 PM Report Share #300763 Posted December 16, 2009 at 04:30 PM (...) Link to comment Share on other sites More sharing options...
Knitter Posted December 16, 2009 at 04:41 PM Report Share #300767 Posted December 16, 2009 at 04:41 PM Caro professor, não é hábito neste fórum fazer os trabalhos dos alunos mas sim tentar orientá-los de modo a aprenderem mais, pelo menos, essa é a minha postura, que é partilhada por muitos dos utilizadores. O impedimento de copiar código é compreensível mas a imposição de não utilizar código aprendido dora das aulas parece-me algo castrador, tendo sido eu aluno até recentemente, teria sido um grande impedimento na minha aprendizagem qualquer imposição do género que os meus professores tivessem colocado, felizmente sempre nos incentivaram a procurar outras fontes de conhecimento além do pouco que se ensina dentro da sala de aulas, que no meu caso sempre foi indicado como sendo local onde se tiram dúvidas sobre o trabalho que o aluno faz fora da aula. Supondo que fosse seu aluno, e que tivesse seguido, por exemplo o Java Tutorial para fazer algum trabalho, onde necessariamente iria aprender mais do que o que me foi ensinado na aula, seria penalizado por isso? Convenhamos, ser penalizado por aprender e evoluir não me parece, como aluno e como formador, a melhor opção. Não pretendo, de modo algum, incentivar a cópia e o plágio, ou a obtenção do trabalho por outros meios que não o desenvolvimento próprio, apenas aligeirar a sua resposta que parece um ultimato aos alunos que, até ao momento, não deram qualquer motivo para tal. Cumprimentos www.sergiolopes.eu Link to comment Share on other sites More sharing options...
SergioBarbosa Posted December 16, 2009 at 04:55 PM Report Share #300770 Posted December 16, 2009 at 04:55 PM (...) Link to comment Share on other sites More sharing options...
Knitter Posted December 16, 2009 at 05:05 PM Report Share #300772 Posted December 16, 2009 at 05:05 PM Não consigo concordar com essa criação de regras, nem como aluno nem como formador, já que nisso vejo a limitação da aprendizagem apenas para facilitar correcções. Mas isso seria fugir ao objectivo deste tópico 😛 Posso então entender que qualquer forma de resolver o problema que vá contra o que foi dado nas aulas será penalizada? Apenas para que não sejam criadas situações desagradáveis a qualquer aluno. www.sergiolopes.eu Link to comment Share on other sites More sharing options...
SergioBarbosa Posted December 16, 2009 at 05:08 PM Report Share #300776 Posted December 16, 2009 at 05:08 PM tu é que sabes 😛 Link to comment Share on other sites More sharing options...
Knitter Posted December 16, 2009 at 05:22 PM Report Share #300784 Posted December 16, 2009 at 05:22 PM A mensagem que o utilizador SergioBarbosa tão eloquentemente fez para esconder era a seguinte: Concordo plenamente contigo, mas como professor e de modo a facilitar a correcção, pois existem muitos meios de programar, tive de criar regras de criaçao do trabalho pratico. E caso fosses meu aluno e estivesse explicito nas regras de entrega do trabalho que nao podias usar determinado codigo e usasses esse codigo terias o trabalho anulado. Continuo a dizer que os foruns sao muito bons, mas nao pode haver trabalhos identicos. Lamento que os alunos possam ter-se visto impedidos de utilizar o fórum para esclarecer as suas dúvidas, creio que esta thread não levará lado algum. Cumprimentos, Knitter www.sergiolopes.eu Link to comment Share on other sites More sharing options...
Hipnoted Posted December 16, 2009 at 10:53 PM Report Share #300930 Posted December 16, 2009 at 10:53 PM Penso que como professor devias dar o exemplo aos teus alunos, e não ter atitudes como as que tiveste neste tópico, que foi eliminar o que tinhas postado e deixar partes do tópico sem nexo. Sinceramente tenho pena dos teus alunos porque ficam limitados ao teu conhecimento e tuas regras. É medo de eles apresentarem/aprenderem algo que te ultrapassa a ti? Ainda por cima nenhum dos teus alunos pediu a ninguém para fazer o trabalho, apresentaram dúvidas. E depois, isto é um fórum público, e não um fórum interno de uma escola, toda a gente tem a liberdade de expor as suas dúvidas e não ser censurado por isso. "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência" Link to comment Share on other sites More sharing options...
tiagoc Posted December 17, 2009 at 01:39 PM Report Share #301055 Posted December 17, 2009 at 01:39 PM Lol tudo a procura do mesmo import static java.util.System.out; Scanner input = new Scanner (System.in); out.println ("Insira o texto a formatar"); Essa parte é facil, existe várias formas de fazer isso, acho apenas que estamos limitados usar classes usadas as aulas; contundo como estamos a falar de input , nao devia ser problema usar outras classes, mas pronto . Se é para usar só Classes String, tens métodos para criar esse ciclo , acho que não deveria ser um ciclo, mas pronto são regras : while (i <5 && !textoEntrada.startsWith(" ")) { i ++; textoEntrada = teclado.nextLine(); // leitura de uma frase } outra forma while (i <5 ) { i ++; textoEntrada = teclado.nextLine(); // leitura de uma frase if (textoEntrada.startsWith(" ")); Break; // sai do ciclo else continue ;e volta ao ciclo } Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now