将变量和整数作为用户输入

时间:2012-12-02 02:05:26

标签: java

我在想这个,并想知道字符串和整数是否可能在同一输入行上。例如,用户输入“A = 2”,“B = 3”和“C = A + B”,C等于5.如果是,我必须知道什么类型的技术?我需要查一下什么?

4 个答案:

答案 0 :(得分:1)

一个好的起点是HashMapString.split

您可以尝试这样的事情:

// In main function
HashMap<String, Integer> map = new HashMap<String, Integer>();
for (String arg : args) {
    String[] split = arg.split(Pattern.quote("="));
    if (split.length > 1) {
        // It had an equals sign.
        String var = split[0], value = split[1];
        map.put(var, Integer.parseInt(value));
        System.out.println(var + " is now " + value); 
    }
}

这不会占A+B,但我会将其作为谜题留给您。

提示map.containsKeymap.get


修改

回答你的问题:

for (int i=0; i<args.length; i++) {
    String arg = args[i];
    // do something with arg
}

相同
for (String arg : args) {
    // do something with arg
}

后者被称为“for-each”或“for-in”。 args变量包含命令行参数。我假设此代码位于main方法中,该方法的方法签名应为public static void main( String[] args )

put方法将键/值对添加到HashMap。基本上,hashmap是值到键的关联(映射)。每个键都可以有一个值,put会覆盖,所以如果你运行

map.put("a", 1);
map.put("b", 2);
map.put("a", 3);

然后以下陈述是正确的:

map.get("a") == 3
map.get("b") == 2
map.get("c") == null
map.get("asdf") == null

有关详细信息,请查看map tutorial

答案 1 :(得分:1)

如果您正在尝试检测命令行参数,那么我会考虑这种方法:

首先,您需要确保用户实际输入了一些参数:

public static void main(String[] args)
{
     if(args.length > 0)
     {
          //Check each set of arguments.
     }
     else
     {
          System.out.println("Invalid number of arguments");
          System.exit(1);
          // Here you can either do a try-catch and throw an exception or just simply exit if the user doesn't input the `enter code here`correct number of arguments. 
     }
}

棘手的部分将是确定用户是否输入A或B或C,这将导致一些解析。但是你需要通过告诉用户使用格式或者搜索字符串来知道输入String的位置。

假设您让用户使用以下方法输入参数:

[program] A=2 B=3 C=A+B

由于WChargin指出args是以空格分隔的,这让我不知所措,我决定将每组参数分解为自己的字符串数组。对于A和B,我用字符“=”将字符串分隔为分隔符,如下所示:

if(args[i].toUpperCase().startsWith("A"))   
{
     resultA = args[i].split("=");  //Split by the delimter "="
     a = Double.parseDouble(resultA[1]);
}

对于A和B,将生成数组{A,2},{B,3}。 C我会分两次。首先是字符“=”,它将产生{C,A + B},然后分割每个字符串,这将产生{,A,+,B}。请注意,split()在resultC [0]中生成一个空字符串,因此我们开始迭代为1。

我们只需检查args的长度,然后迭代查找参数值:

public static void main(String[] args)
{
    double a = 0;
    double b = 0; 
    double c = 0;
    String[] resultA = null;
    String[] resultB = null;
    String[] resultC = null;
    String[] result = null;

    if(args.length > 0)
    {
        for(int i=0; i < args.length; i++)
        {   
            if(args[i].toUpperCase().startsWith("A"))   // Implemented startsWith() thanks to WChargin
            {
                resultA = args[i].split("=");   //Split by the delimter "="
                a = Double.parseDouble(resultA[1]);
            }
            else if(args[i].toUpperCase().startsWith("B"))
            {
                resultB = args[i].split("=");
                b = Double.parseDouble(resultB[1]);
            }
            else if(args[i].toUpperCase().startsWith("C"))
            {
                result = args[i].split("="); //We don't need C, split all of the arguments
                resultC = result[1].split(""); //This way we have an array of strings for each value to iterate through
                // The only problem with split("") is that we will get an empty string at the beginning of the array

                for(int j=1; j < resultC.length; j++)
                {
                    if(resultC[j].toUpperCase().startsWith("A"))
                    {
                        if(resultC[j+1].equals("+"))
                        {
                            if(resultC[j+2].toUpperCase().startsWith("A"))
                            {
                                c = a + a;
                                break;
                                // Once we get out answer, break otherwise we'll get a ArrayIndexOutOfBoundsException because the program will continue iterating
                            }
                            else if(resultC[j+2].toUpperCase().startsWith("B"))
                            {
                                c = a + b;
                                break;
                            }
                            else
                            {
                                System.out.println("Argument parse error");
                            }
                        }
                        else if(resultC[j+1].equals("-"))
                        {
                            if(resultC[j+2].toUpperCase().startsWith("A"))
                            {
                                c = a - a;
                                break;
                            }
                            else if(resultC[j+2].toUpperCase().startsWith("B"))
                            {
                                c = a - b;
                                break;
                            }
                            else
                            {
                                System.out.println("Argument parse error");
                            }
                        }
                        else if(resultC[j+1].equals("*"))
                        {
                            if(resultC[j+2].toUpperCase().startsWith("A"))
                            {
                                c = a * a;
                                break;
                            }
                            else if(resultC[j+2].toUpperCase().startsWith("B"))
                            {
                                c = a * b;
                                break;
                            }
                            else
                            {
                                System.out.println("Argument parse error");
                            }
                        }
                        else if(resultC[j+1].equals("/"))
                        {
                            if(resultC[j+2].toUpperCase().startsWith("A"))
                            {
                                c = a / a;
                                break;
                            }
                            else if(resultC[j+2].toUpperCase().startsWith("B"))
                            {
                                c = a / b;
                            }
                            else
                            {
                                System.out.println("Argument parse error");
                            }
                        }
                    }
                    else if(resultC[j].toUpperCase().startsWith("B"))
                    {
                        if(resultC[j+1].equals("+"))
                        {
                            if(resultC[j+2].toUpperCase().startsWith("A"))
                            {
                                c = b + a;
                                break;
                            }
                            else if(resultC[j+2].toUpperCase().startsWith("B"))
                            {
                                c = b + b;
                                break;
                            }
                            else
                            {
                                System.out.println("Argument parse error");
                            }
                        }
                        else if(resultC[j+1].equals("-"))
                        {
                            if(resultC[j+2].toUpperCase().startsWith("A"))
                            {
                                c = b - a;
                                break;
                            }
                            else if(resultC[j+2].toUpperCase().startsWith("B"))
                            {
                                c = b - b;
                                break;
                            }
                            else
                            {
                                System.out.println("Argument parse error");
                            }
                        }
                        else if(resultC[j+1].equals("*"))
                        {
                            if(resultC[j+2].toUpperCase().startsWith("A"))
                            {
                                c = b * a;
                                break;
                            }
                            else if(resultC[j+2].toUpperCase().startsWith("B"))
                            {
                                c = b * b;
                                break;
                            }
                            else
                            {
                                System.out.println("Argument parse error");
                            }
                        }
                        else if(resultC[j+1].equals("/"))
                        {
                            if(resultC[j+2].toUpperCase().startsWith("A"))
                            {
                                c = b / a;
                                break;
                            }
                            else if(resultC[j+2].toUpperCase().startsWith("B"))
                            {
                                c = b / b;
                                break;
                            }
                            else
                            {
                                System.out.println("Argument parse error");
                            }
                        }
                    }
                    else
                    {
                        System.out.println("Argument error in C");
                        System.exit(1);
                    }
                }
            }
        }
    }
    else
    {
        System.out.println("Invalid number of arguments");
        System.exit(1);
    }

    System.out.printf("A: %f\nB: %f\nC: %f\n", a, b, c);
}

请注意,我可能没有考虑所有可能性。

通过命令行参数解析肯定更简单。我给你的方法太长了。

我希望这会对你有所帮助!

答案 2 :(得分:0)

首先你必须进行字符串匹配。其中背面'='的位置编号为'2',前面的位置字符串'='为'A',并将字符串'A'保存到数字索引数组中,并将数字'2'保存到值索引数组中A.那么技术使用B = 2就像那样。你用字符串匹配检测到的最后一个。在背面和正面操作符上,例如'='是'A'和'B'。并将index的数组与此字符串相同。和总和。然后将和值保存到变量字符串C中,就像保存变量A和B

一样

答案 3 :(得分:0)

如果你使用Java 6+,那么脚本非常有用:

public static void main(String[] args) {
    try {
        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine scripEngine = mgr.getEngineByExtension("js");

        scripEngine.eval("A=2; B=3; C=A+B");

        System.out.println("" + scripEngine.get("A") + "+" + scripEngine.get("B") + "=" + scripEngine.get("C"));
    } catch (ScriptException e) {
        e.printStackTrace();
    }
}

输出: 2.0 + 3.0 = 5.0