2016-12-28 32 views
-1

我正在爲我的java編程1類的一個項目工作,您應該採取一個字符串並將字符串中的每個字母的大寫字母更改爲較低和較低。這是我的代碼到目前爲止,無論我嘗試什麼,我不能讓程序返回我的最終字符串輸出。從for循環返回一個字符串

import java.util.*; 

public class LowerUpper { 
    public static void Main(String[] args) { 
     Scanner letters = new Scanner(System.in); 
     System.out.println("Please enter 3 letters:"); 
     String input = letters.next(); 
     int length = input.length(); 

     for (int i = 0; i < length; i++){ 
      if (Character.isUpperCase(input.charAt(i))) { 
       Character.toLowerCase(input.charAt(i)); 
       break; 
      } 
      else if (Character.isLowerCase(input.charAt(i))) { 
       Character.toUpperCase(input.charAt(i)); 
       break; 
      } 
      return input.toString(); 
     } 
    } 
} 

在此先感謝您的幫助!我相信這只是一個簡單的解決方案,我錯過了。

+0

字符串是不可改變的,在代碼中,您不會更改字符串,但只需獲取字符的上/下副本。嘗試使用'String.toUpperCase()'和'String.toLowerCase()'方法,比如「abcd」.toUpperCase(); –

回答

0

使用StringBuilder,讓您轉換的字符英寸

你也不想break否則你只會轉換的第一個字符

嘗試像

StringBuilder buf = new StringBuilder(); 
for (int i = 0; i < length; i++){ 
    if (Character.isUpperCase(input.charAt(i))) { 
    buf.append (Character.toLowerCase(input.charAt(i))); 
    // break; 
    } 
    else { 
    buf.append (Character.toUpperCase(input.charAt(i))); 
    // break; 
    } 
} 

return buf.toString(); 

編輯東西

測試解決方案

String input = "this iS my test"; 
    int length = input.length(); 

    StringBuilder buf = new StringBuilder(); 
    for (int i = 0; i < length; i++){ 
     if (Character.isUpperCase(input.charAt(i))) { 
      buf.append (Character.toLowerCase(input.charAt(i))); 
      // break; 
     } 
     else { 
      buf.append (Character.toUpperCase(input.charAt(i))); 
      // break; 
     } 
    } 

    System.out.println(buf.toString()); 

輸出

這是我的測試

2

首先,它main(不Main)。其次,您忘記創建第二種方法(返回String),則不能從void方法(如main)返回String。一旦你有一個方法,你需要調用它。但是,讓我們從這個方法開始吧。您需要在生成角色時存儲角色。在Java 8+,你可能會做

public static String swapCase(String input) { 
    return input.codePoints() 
      .map(ch -> Character.isUpperCase(ch) ? 
         Character.toLowerCase(ch) : 
         Character.toUpperCase(ch)) 
      .collect(StringBuilder::new, 
         StringBuilder::appendCodePoint, 
         StringBuilder::append).toString(); 
} 

一樣,

public static String swapCase(String input) { 
    StringBuilder sb = new StringBuilder(); 
    char[] chars = input.toCharArray(); 
    for (char ch : chars) { 
     if (Character.isUpperCase(ch)) { 
      sb.append(Character.toLowerCase(ch)); 
     } else { 
      sb.append(Character.toUpperCase(ch)); 
     } 
    } 
    return sb.toString(); 
} 

一樣,

public static String swapCase(String input) { 
    StringBuilder sb = new StringBuilder(); 
    input.chars().forEachOrdered(ch -> { 
     sb.append(Character.isUpperCase(ch) ? 
       Character.toLowerCase(ch) : 
       Character.toUpperCase(ch)); 
    }); 
    return sb.toString(); 
} 

然後調用它,

public static void main(String[] args) { 
    Scanner letters = new Scanner(System.in); 
    System.out.println("Please enter 3 letters:"); 
    String input = letters.next(); 
    System.out.printf("Original: %s, Swapped: %s%n", input, swapCase(input)); 
} 
+0

加一個注意'主要' –

+1

如果你打算使用流和lambdas,爲什麼不直接映射輸入而不是改變一個StringBuilder?副作用是邪惡的,畢竟:) –

+0

@YonaAppletree只是累了,但好點。編輯。 –