此程序应输入名称后跟名称“END”的数据集。程序应按照输入的相反顺序打印出数据集中的名称列表。我有什么作品,但如果我输入“Bob Joe Sally Sue”,它会打印出“Sue Sally Joe Bob”的“euS yllaS eoJ boB”。救命啊!?
import java.util.Scanner;
public class ReverseString {
public static void main(String args[]) {
String original, reverse = "";
Scanner kb = new Scanner(System.in);
System.out.println("Enter a list of names, followed by END:");
original = kb.nextLine();
int length = original.length();
while (!original.equalsIgnoreCase("END") ) {
for ( int i = length - 1; i >= 0 ; i-- )
reverse = reverse + original.charAt(i);
original = kb.next();
}
System.out.println("Reverse of entered string is: "+reverse);
}
}
答案 0 :(得分:1)
我认为你需要使用这个简单的算法。实际上你并没有采用正确的方法。
取整个字符串,其中包含以空格分隔的所有名称;
使用空格分隔符(使用方法 split )
分割操作后,您将返回一个数组。从末尾(index:array.length-1)循环到start元素(1)并将这些元素保存在另一个字符串中
public String reverseLine(String currLine) {
String[] splittedLine = currLine.split(" ");
StringBuilder builder = new StringBuilder("");
for(int i = splittedLine.length-1; i >= 1; i--) {
builder.append(splittedLine[i]).append(" ");
}
return builder.toString();
}
我认为每行包含所有以空格分隔的名称,最后有一个字符串为“END”
答案 1 :(得分:0)
使用上面评论中建议的方法非常简单,看起来像是:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<String> names = new ArrayList<>();
while (sc.hasNext())
{
String name = sc.next();
if (name.equals("END"))
{
break;
}
names.add(name);
}
Collections.reverse(names);
for (String name: names)
{
System.out.println(name);
}
System.out.println("END");
}
让扫描仪为您提取代币,无需自己动手。
答案 2 :(得分:0)
快速方法,将结果存储在StringBuilder中:
StringBuilber reverse = new StringBuilder();
while (!original.equalsIgnoreCase("END")) {
reverse.append(new StringBuilder(original).reverse()).append(" ");
original = kb.next();
}
System.out.println("Reverse: " + reverse.reverse().toString());