2015-12-03 81 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