提示用户在一行中输入名称并将其打印为" Last,First"

时间:2014-11-07 19:45:50

标签: java java.util.scanner user-input

我们整个实验室中没有人能够解决这个问题,所以我们必须做好功课。我们将提示用户在一行中输入他们的名字和姓氏。主方法应该处理所有println语句,并应将名称打印为Last,First。

line 26 states "cannot find symbol."
line 36 states "not a statement. ';' expected.
line 39 states unreachable statement.

我一直在玩这个代码一个小时而且已经放弃了。有什么帮助吗?

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lab11;

import java.util.Scanner;

/**
 *
 * @author xxxxxx
 */
public class Lab11 {
    public static void main(String[] args) {
        System.out.println("Enter your name: ");
        Scanner user_input=new Scanner(System.in);

        changeNameFormat();
        System.out.println(lastName+", " + firstName);

        System.out.println("Enter a word. ");
        palindrome();
    }

    public static String changeNameFormat() {
        String firstName, lastName;
        firstName, lastName = user_input.nextLine;
        return lastName;
        return firstName;
    }

4 个答案:

答案 0 :(得分:1)

以下是您需要执行的步骤列表:

获取输入[将是示例:" John Smith"]

将它分成两部分[有几种方法可以做到]

firstName = input.substring(0, input.indexOf(" "));
lastName = input.substring(input.indexOf(" ")+1, input.length());

substring()返回字符串的一部分。

indexOf()在字符串中找到特定字符。

它需要一个起始值和一个结束值。

在这种情况下,我们从头开始,到找到空格时结束。

要获取姓氏,我们从找到空格开始,到字符串末尾结束。

您还可以将此与.trim()方法结合使用,该方法可以从字符串的开头/结尾删除空格。

最后,我们返回连接值:

return lastName + ", " + firstName;

完整代码:

package lab11;
import java.util.Scanner;
public class Lab11 {
    public static Scanner user_input;
    public static void main(String[] args) {
        user_input = new Scanner(System.in);
        System.out.print("Enter your name: ");
        System.out.println(changeNameFormat(user_input.nextLine()));
    }
    public static String changeNameFormat(String input) { //Pass a name
        String firstName, lastName;
        firstName = input.substring(0, input.indexOf(" "));
        lastName = input.substring(input.indexOf(" ")+1, input.length());
        return lastName + ", " + firstName;
    }
}

经过测试:http://www.compileonline.com/compile_java_online.php

最后一件事。使你的方法在命名时起作用是一个很好的惯例。

由于你的名字是#34; changeNameFormat()",我们应该把它传给我们想要改变的名字。

然后在我们的主要内容中,我们可以获取输入,甚至将其作为参数传递。

答案 1 :(得分:0)

"找不到符号"将是palindrome(),这是一种方法调用,但您无法在任何地方定义它(并且它似乎与问题无关)。您还可以在

上找到这个
System.out.println(lastName+", " + firstName);

因为此时您尚未宣布lastNamefirstName

"不是声明"是行firstName, lastName = ...,它在Java中不是有效的语法(尽管它在某些语言中,您可以一次分配给两个变量)。您需要找到一种方法将输入分成两部分,并将一部分分配给firstName,将一部分分配给lastName;但就目前而言,这条线并不是有意义的Java。

"无法访问的代码"是return firstName。之前的return行结束了方法的执行,因此您的代码无法访问return firstName语句。你应该打印东西,而不是归还它们。


在这种情况下,报告的所有错误都是真实的。但一般来说,如果代码的第一部分有很多错误,那么编译器就不能可靠地识别以后的错误,因为它不会设法解析整个文件。因此,有时候,您会发现在前几行中修复了语法错误,这似乎在以后会产生问题。它并没有真正创造一个新问题,只是编译器以前无法找到它。

答案 2 :(得分:0)

Java不支持该语法。相反,您需要使用类似String.split(String)的内容,并且可以将其与格式化输出(如

)结合使用
Scanner input = new Scanner(System.in);
System.out.println("Enter your name: ");
if (input.hasNextLine()) {
    String line = input.nextLine();
    String[] names = line.split("\\s+"); // <-- globs consecutive white-space
    if (names.length > 1) {
        String firstName = names[0];                // <-- indexes start at 0
        String lastName = names[names.length - 1];  // <-- so subtract 1!
        System.out.printf("%s, %s%n", lastName, firstName);
    } else {
        System.out.println("Unknown: " + line);
    }
}

答案 3 :(得分:0)

我的问题有以下解决方案,必须使用空格分隔名字和姓氏

import java.util.Scanner;

public class LastFirst {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Please Enter your name");
        String name = scanner.nextLine();
        name = name.substring(name.indexOf(" ")+1, name.length())+" "+name.substring(0, name.indexOf(" "));
        System.out.println(name);
    }
}