我们整个实验室都没有人能解决这个问题,所以我们必须做作业。我们将提示用户在一行中输入他们的名字和姓氏。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);
因为此时您还没有声明lastName
或firstName
。
"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);
}
}