簡體   English   中英

提示用戶在一行上輸入名稱並將其打印為“ Last,First”

[英]Prompt user to enter name on one line and print it out as “Last, First”

在我們整個實驗室中,沒有人能夠解決這個問題,因此我們必須做作業。 我們將提示用戶在一行上輸入他們的名字和姓氏。 主要方法應該處理所有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;
    }

這是您需要執行的步驟列表:

獲取輸入[將是示例:“約翰·史密斯”]

分成兩部分[有幾種方法可以執行此操作]

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()”,因此我們可能應該將其更改為我們想要更改的名稱。

然后在我們的主體中,我們可以獲得輸入,甚至可以將其作為參數傳遞。

“找不到符號”將是palindrome() ,這是一個方法調用,但是您尚未在任何地方定義它(而且似乎與問題無關)。 您還將在線上獲得此

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

因為那時您還沒有聲明lastNamefirstName

“不是語句”行firstName, lastName = ... ,這在Java中不是有效的語法(盡管在某些語言中,您可以一次將其分配給兩個變量)。 您需要找到一種將輸入分為兩部分的方法,然后將一個部分分配給firstName並將一個部分分配給lastName 但就目前而言,這行對Java沒有意義。

“無法訪問的代碼”是return firstName 上一個return行結束了該方法的執行,因此您的代碼將永遠不會return firstName語句。 您應該在打印東西,而不是退還它們。


在這種情況下,報告的所有錯誤都是真實的。 但是總的來說,如果您在代碼的第一部分中有很多錯誤,那么編譯器將無法可靠地識別出以后的錯誤,因為它無法解析整個文件。 因此,有時您會發現您在前幾行中修復了語法錯誤,以后似乎會產生問題。 它並不是真正在創造一個新問題,只是編譯器以前無法找到它。

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

對於您的問題,我有以下解決方案,名字和姓氏必須用空格分開

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM