亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 switch 語句將字符串中的每個元音替換為以下元音

使用 switch 語句將字符串中的每個元音替換為以下元音

藍山帝景 2022-10-20 15:13:59
我是編程和學習 Java 的新手。我正在努力讓這個 switch 語句與替換字符串中的元音然后打印新字符串一起工作。我一直在用 ChangeV 找不到符號。另外,不確定如何遍歷字符串以檢查元音,然后替換每個元音。我想從用戶那里得到輸入,但又不清楚如何正確合并。謝謝你的幫助!public class Main{    public static void main(String args[]){    //Scanner myScanner = new Scanner(System.in);    //String s = myScanner.next();    ChangeV v = new ChangeV();    System.out.println(v.ChangeV());}public void ChangeV(){String s = "aeiou";char [] vowels ={'a', 'e' ,'i', 'o','u'};// I believe I would need a for loop switch (//not sure what goes here) {    case'a' :    s.replace('a', 'e');    break;    case 'e' :    s.replace('e', 'i');    break;    case 'i' :    s.replace('i', 'o');    break;    case 'o' :    s.replace('o', 'u');    break;    case 'u' :    s.replace('u', 'a');    break;}}    }}
查看完整描述

3 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

你接近的方式有兩個問題。

  1. s.replace('a', 'e');不會替換字符串中的任何字符,因為String對象在 Java 中是不可變的。s僅當您將其分配回as時,它才會替換s = s.replace('a', 'e');

  2. 以這種方式替換循環中字符串的每個字符的問題是,在每次下一次迭代中,replace如果匹配該字符,它甚至會替換任何過去的字符。所以本質上,“aeiou”最后會變成“aaaaa”,因為在最后一個字符處,你會s = s.replace('u', 'a');用 . 替換每個字符a

因此,要替換字符串中的字符,下面是一種更好的方法:

public static void main(String[] args){


    String oldString = "aeiou";

    char[] characters = oldString.toCharArray();


    for (int i = 0; i < characters.length; i++) {

        switch (characters[i]) {

            case 'a':

                characters[i] = 'e';

                break;

            case 'e':

                characters[i] = 'i';

                break;

            case 'i':

                characters[i] = 'o';

                break;

            case 'o':

                characters[i] = 'u';

                break;

            case 'u':

                characters[i] = 'a';

                break;

            default:

                break;

        }

    }


    String newString = String.valueOf(characters);

    System.out.println(oldString);

    System.out.println(newString);

}

如果您想用用戶輸入的任何字符串替換元音,您可以使用Scanner通過控制臺讀取用戶的輸入,它可以實現如下。


public class Main {


    public static void main(String[] args){


        Scanner scanner = new Scanner(System.in);

        String oldString = scanner.next();


        String newString = changeVowels(oldString);


        System.out.println(newString);

        scanner.close();


    }


    private static String changeVowels(String oldString) {

        char[] characters = oldString.toCharArray();


        for (int i = 0; i < characters.length; i++) {

            switch (characters[i]) {

                case 'a':

                    characters[i] = 'e';

                    break;

                case 'e':

                    characters[i] = 'i';

                    break;

                case 'i':

                    characters[i] = 'o';

                    break;

                case 'o':

                    characters[i] = 'u';

                    break;

                case 'u':

                    characters[i] = 'a';

                    break;

                default:

                    break;

            }

        }


        return String.valueOf(characters);

    }

}


查看完整回答
反對 回復 2022-10-20
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

你寫了這一行:


ChangeV v = new ChangeV();

您是在告訴編譯器有一個以ChangeV無參數構造函數命名的類。


我在您的代碼中沒有看到這樣的類,只有public class Main.


你還寫了這一行:


public void ChangeV(){

這是不正確的,因為它超出了Main類中的大括號。Java 是一種面向對象的語言。每個函數都必須出現在類定義中。像 Python 這樣的語言是不同的:您可以在源文件中自己定義一個函數。在 Java 中并非如此。


如果它在大括號內,Main它將是Main名為的類上的一個方法ChangeV,它不接受任何參數并返回void。


那不是構造函數。


構造函數是一種特殊的方法,它與它所屬的類同名,并且沒有返回類型。


這是一個沒有參數的構造函數:


public ChangeV() {

    // initialize the instance in here.

}

我不認為你想要那個。


這就是我認為你想要的:


public class VowelChanger {


    public static void main(String [] args) {

        for (String arg : args) {

            System.out.println(String.format("before: %s after: %s", arg, changeVowels(args));

        }

    }


    public static String changeVowels(String s) {

        // put your code to replace vowels here.

    }

}


查看完整回答
反對 回復 2022-10-20
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

我相信duffymo 的回答已經掩蓋了您的方法使用問題,所以我將簡單地提及使用replace問題s = s.replace('a', 'e');

String.replace將替換每一次出現,所以你可以簡單地連續調用它 5 次:

s = s.replace( 'a', 'e' );

s = s.replace( 'e', 'i' );

s = s.replace( 'i', 'o' );

s = s.replace( 'o', 'u' );

s = s.replace( 'u', 'a' );

但是你最終只會得到'a',因為每個'a'都會變成'e',然后每個'e''i'等等,直到每個'u'都變成'a'。好的,我們可以在 where modify 之后反轉順序以查找元音:


s = s.replace( 'u', 'a' );

s = s.replace( 'o', 'u' );

s = s.replace( 'i', 'o' );

s = s.replace( 'e', 'i' );

s = s.replace( 'a', 'e' );

但是我們仍然對以“e”(暫時是“a”)結尾的“u”有問題。因此,一種解決方法是使用臨時字符,但如何確保它尚未在您的文本中使用:


s = s.replace( 'u', '*' ); //don't set it to 'a' directly

s = s.replace( 'o', 'u' );

s = s.replace( 'i', 'o' );

s = s.replace( 'e', 'i' );

s = s.replace( 'a', 'e' );

s = s.replace( '*', 'a' ); //then replace the temp character by 'a'

更好的解決方案是處理文本,一次處理一個字符。如果你找到一個元音,你就改變它。


我的解決方案將使用數組來減少冗長,并讓索引為您提供下一個元音。(% array.length如果您在最后一個元音之后,則使用 a 從開頭返回)


static char [] vowels ={'a', 'e' ,'i', 'o','u'};


public static String changeV(String s){

    char[] chars = s.toCharArray(); //transform a String in an array of character

    for ( int i = 0; i < chars.length; ++i ) { //iterate the array

        int index = Arrays.binarySearch( vowels, chars[i] ); //look for the current character in the vowels array and get his index

        if ( index > -1 ) // is it a vowels

            chars[i] = vowels[( index + 1 ) % vowels.length]; // change with the next vowels

    }

    return new String(chars); //create a nez String with the result

}

這會給你:


changeV( "aeiou" ); //eioua

changeV( "This is a test" ); //Thos os e tist

changeV( "Hello world" ); //Hillu wurld


查看完整回答
反對 回復 2022-10-20
  • 3 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號