2015-12-03 96 views
0

我想完成一個項目,其中用戶輸入String,然後我的程序顯示String反轉。我能夠做到這一點,但我需要做的是消息和輸入框,這給我帶來麻煩。我的代碼在行12上有錯誤。它說:我的Java代碼錯誤?

Error: The method showMessageDialog(java.awt.Component, java.lang.Object) in the type javax.swing.JOptionPane is not applicable for the arguments (java.lang.String) 

下面是相關的代碼:

import java.lang.StringBuilder; 
import java.util.Scanner; 
import javax.swing.JOptionPane; 

public class reverse 
{ 
    public static void main(String[] args) 
    { 
    Scanner input = new Scanner(System.in); 
    String string; 
    JOptionPane.showInputDialog("Please input a string"); 
    string = input.nextLine(); 
    JOptionPane.showMessageDialog(new StringBuilder(string).reverse().toString()); 
    } 
} 

任何幫助將不勝感激。

+2

請張貼相關碼,優選地是[最小,完整的,並且實施例可驗證程序](http://stackoverflow.com/help/麥克),這裏有你的問題,而不是鏈接。鏈接可能會死亡,鏈接可能包含大型節目,節目太大而無法請求志願者進行審查。您對此要求的遵守情況將不勝感激,並可能幫助您獲得更好更快的幫助。 –

+2

那裏。這次我爲你做了。 –

回答

0

你要做的是,使用JOptionPane作爲源來獲取來自用戶的輸入,所以你不需要掃描器。一旦你從用戶存儲字符串,那麼你可以用它來實例化一個StringBuilder。

使用JOptionPane.showMessageDialog時,必須傳遞null作爲組件的第一個參數。

String string = JOptionPane.showInputDialog("Please input a string"); 
StringBuilder sb = new StringBuilder(string); 
JOptionPane.showMessageDialog(null, sb.reverse().toString()); 

更完整和驗證需求的解決方案看起來如下:

public static void main(String... args) { 
     String string = JOptionPane.showInputDialog("Input a String to reverse it"); 
     if (string != null && string.length() > 0) { 
      StringBuilder reversedString = new StringBuilder(string); 
      JOptionPane.showMessageDialog(null, reversedString.reverse().toString()); 
     } else { 
      //validation in case Cancel/Close button or empty input provided 
      if (string == null) { 
       JOptionPane.showMessageDialog(null, "No input provided."); 
      } else { 
       JOptionPane.showMessageDialog(null, "empty input provided."); 
      } 
     } 
    } 

要反轉String不使用StringBuilder你可以使用一個for loop的這樣做。你開始在原始字符串上一次循環一個字符,但是,你從頭開始並開始。在循環內部,一次創建一個字符,創建原始字符串的反轉。見下文:

String originalString= JOptionPane.showInputDialog("Please input a string"); 
String reversed = ""; 

//loop from end of string to the beginning 
for(int i = originalString.length()-1; i >= 0; i--) { 
    /* 
    * Use the previous value of reversed, add to it new character 
    * this addition causes a new string to be created internally since 
    * String is immutable 
    */ 
    reversed += originalString.charAt(i); 
} 
JOptionPane.showMessageDialog(null, reversed); 
0

//這應該工作:

import java.lang.StringBuilder; 
import javax.swing.JOptionPane; 

public class reverse 
{ 
    public static void main(String[] args) 
    { 
    String string = JOptionPane.showInputDialog("Please input a string"); 

    JOptionPane.showMessageDialog(null, new StringBuilder(string).reverse().toString()); 

    } 
} 
+0

非常感謝!這工作完美。但我還有一個問題。我向我的老師展示了更新後的代碼,她說我們不會大聲使用字符串生成器......那麼有沒有任何方法可以在沒有字符串生成器的情況下執行此操作?但即使你不知道非常感謝你,因爲我現在知道如何正確顯示消息框中的文本,這將長期幫助我。 – logonin

+0

@logonin您可以反轉字符串而不使用** StringBuilder **,而是使用** for循環**。我已經更新了我的答案,包括如何操作的說明。 – Raf