gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 07:25:10 27 4
gpt4 key购买 nike

我正在考虑这个问题,想知道字符串和整数是否可以位于同一输入行。例如,用户输入“A=2”、“B=3”和“C= A+B”,其中 C 等于 5。如果是这样,我需要知道什么类型的技术?我需要查找什么?

最佳答案

如果您尝试检测命令行参数,那么我会考虑类似以下方法:

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

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,这将导致一定量的解析。但是您需要通过告诉用户使用格式或搜索字符串来知道它在输入字符串中的位置。

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

[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);
}

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

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

希望这对您有帮助!

关于java - 将变量和整数作为用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13665755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com