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



我们整个实验室都没有人能解决这个问题,所以我们必须做作业。我们将提示用户在一行中输入他们的名字和姓氏。main方法应该处理所有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;
    }

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

获取输入[将是示例:"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

最后一件事。让方法按名称工作是一个很好的惯例。

由于您的名称是"changeNameFormat()",我们可能应该将要更改的名称传递给它。

然后在我们的main中,我们可以获得输入,甚至可以将其作为参数传递。

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);
    }
}

"找不到符号"将是palindrome(),这是一个方法调用,但您尚未在任何地方定义它(它似乎与问题无关)。你也可以在上得到这个

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

因为此时您还没有声明lastNamefirstName

"not a statement"是行firstName, lastName = ...,这在Java中不是有效语法(尽管在某些语言中,您可以同时为两个变量赋值)。您需要找到一种方法,将输入拆分为两部分,并将一部分分配给firstName,将一部分指定给lastName;但就目前情况来看,这一行在Java中没有任何意义。

"无法访问的代码"是return firstName。前一行return结束了方法的执行,因此您的代码永远不会到达return firstName语句。你应该打印东西,而不是退货。


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

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

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);
    }
}

相关内容

  • 没有找到相关文章

最新更新