我想用每个单词的字符向后打印句子。将每个单词翻译成句子
例如: 狐狸跳过栅栏。
成为: ehT xf depmuj revo eht ecnef。
我只能颠倒第一个单词,然后它给了我一个ArrayIndexOutOfBoundsException。
我想用每个单词的字符向后打印句子。将每个单词翻译成句子
例如: 狐狸跳过栅栏。
成为: ehT xf depmuj revo eht ecnef。
我只能颠倒第一个单词,然后它给了我一个ArrayIndexOutOfBoundsException。
一些变化需要做你的代码:
1.更改sentence.length()
与words.length
2.使用read.nextLine();
来获得句子输入
尝试
import java.util.Scanner;
import java.util.Stack;
public class test {
public static void main(String[] args) {
Scanner read = new Scanner(System.in); // Error in line 11
System.out.print("Enter a sentence: ");
String sentence = read.nextLine();
boolean containsPeriod= false;
if (".".equals(sentence.substring(sentence.length()-1,sentence.length()))){
sentence = sentence.substring(0,sentence.length()-1);
containsPeriod=true;
}
String[] words = sentence.split(" ");
for (int i = 0; i < words.length; i++) {
String word = words[i]; // Error in line 23
System.out.print(reverseWord(word));
if(i!=words.length-1)
System.out.print(" ");
}
if(containsPeriod)
System.out.print(".");
read.close();
}
private static String reverseWord(String sentence) {
Stack<Character> rev = new Stack();
for (int ii = 0; ii < sentence.length(); ii++) {
rev.push(sentence.charAt(ii));
}
String out = "";
while (rev.size() != 0) {
out += rev.pop();
}
return out;
}
}
请尝试下面的简单代码。这是很容易:
String[] words = sentence.split(" ");
for (String word : words) {
System.out.print(new StringBuilder(word).reverse() + " ");
}
这是一个很好的答案。 +1。 downvoters可以解释他们的问题吗? –
通常,当问及这些问题时,预期受访者提供算法方法。尽管提到两种方法都很好! – xploreraj
在第一for
循环替换sentence.length()
与words.length
。
你想在句子中每个单词迭代一次这个循环;但是你写的代码在句子中的每个字母上迭代一次。那是你的错误。
试试这个
public static void main(String args[]) {
String input = "The fox jumped over the fence";
StringBuilder sbReverseSentance = new StringBuilder();
String words[] = input.split(" ");
for (String word : words) {
for (int i = word.length() - 1; i >= 0; i--) {
sbReverseSentance.append(word.charAt(i));
}
sbReverseSentance.append(" ");
}
System.out.println (sbReverseSentance.toString());
}
试试这个,它不处理标点符号。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner read = new Scanner(System.in);
System.out.print("Enter a sentence: ");
String sentence = read.nextLine();
String[] words = sentence.split(" ");
String[] reversed_words = new String[words.length];
for (int i = 0; i < words.length; i++) {
reversed_words[i] = reverseWord(words[i]);
}
for (int i = 0; i < reversed_words.length; i++)
System.out.println(reversed_words[i]);
}
private static String reverseWord(String word) {
String result = "";
char[] array = word.toCharArray();
for (int i = array.length - 1; i >= 0; i--) {
result += array[i];
}
return result;
}
}
您可以修复你的代码如下所示
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;
public class Query1 {
public static void main(String[] args) {
Scanner read = new Scanner(System.in); // Error in line 11
System.out.print("Enter a sentence: ");
// String sentence = read.next();
// read full line here instead of just one word
String sentence = read.nextLine();
String[] words = sentence.split(" ");
// this looks goes to array length
// for (int i = 0; i < sentence.length(); i++) {
for (int i = 0; i < words.length; i++) {
String word = words[i]; // Error in line 23
// System.out.println(reverseWord(word));
// use print not println
System.out.print(reverseWord(word));
// this loop is not at all required
// for (i = 0; i < words.length - 1; i++) {
// System.out.println(" ");
// }
System.out.print(" ");
}
}
private static String reverseWord(String sentence) {
Deque<Character> rev = new ArrayDeque<Character>();
// ArrayStack<Character> rev = new ArrayStack<Character>();
for (int ii = 0; ii < sentence.length(); ii++) {
rev.push(sentence.charAt(ii));
}
String out = "";
while (rev.size() != 0) {
out += rev.pop();
}
return out;
}
}
欢迎来到SO!还有一个类似的问题。稍后您可以投票结束。祝你好运! –
应该有每个单词* *在句子中,标题是太误导 – Evgeny