如何根据另一个变量设置变量的值?
Posted
技术标签:
【中文标题】如何根据另一个变量设置变量的值?【英文标题】:How do I set the value of a variable based on another variable? 【发布时间】:2022-01-10 12:46:58 【问题描述】:我正在尝试为名为站点的变量获取扫描仪输入,并根据站点的输入将另一个变量 emr 设置为 3 个可能值之一。
import java.util.Scanner;
public class Program
public static void main(String[] args)
Scanner read = new Scanner(System.in);
String site = read.nextLine();
if (site == "site1")
String emr = "sampletext";
else if (site == "site2")
String emr = "domain";
else
String emr = " ";
System.out.print(emr);
有什么方法可以让我完成这项工作吗?我对 Java 的理解(显然)充其量是有限的,我是最近才开始的。
【问题讨论】:
这能回答你的问题吗? What is 'scope' in Java? 【参考方案1】:每个变量在Java
中都有一个作用域。该变量不存在于其范围之外。所以从技术上讲,这里声明的emr
if (site == "site1")
String emr = "sampletext";
此处无效
else if (site == "site2")
String emr = "domain";
因为if
和else if
块中的emr
都有block scope
。
但是,emr
声明如下
String site = read.nextLine();
String emr;
在整个方法中都是有效的,因为它具有方法范围。你可以阅读更多here
工作代码片段如下。
import java.util.Scanner;
public class Test
public static void main(String[] args)
Scanner read = new Scanner(System.in);
String site = read.nextLine();
String emr;
if (site.equals("site1"))
emr = "sampletext";
else if (site.equals("site2"))
emr = "domain";
else
emr = " ";
System.out.print(emr);
在比较Objects
(例如String
)时,您需要小心。您可能想看看接受的答案here
正如@Hleb Shypula 所指出的,如果您想取消最后一个 else 块,您需要预先将默认值初始化为 emr
。以下是更新后的代码。
import java.util.Scanner;
public class Test
public static void main(String[] args)
Scanner read = new Scanner(System.in);
String site = read.nextLine();
String emr = " ";
if (site.equals("site1"))
emr = "sampletext";
else if (site.equals("site2"))
emr = "domain";
System.out.print(emr);
【讨论】:
我们可以直接初始化 emr 变量:String emr = " ";。所以我们可以摆脱最后一个 else 条件。 感谢@HlebShypula 的建议。已对其进行了编辑。【参考方案2】:虽然其他答案也可以,但我鼓励您将检查输入值的逻辑和分配响应值的逻辑分开。
请参阅以下内容:
public class ScannerProgram
public static void main(String[] args)
Scanner read = new Scanner(System.in);
String site = read.nextLine();
System.out.println(getEmr(site));
private static String getEmr(String inputString)
switch (inputString)
case "site1":
return "sampletext";
case "site2":
return "domain";
default:
return " ";
另外需要注意的是:根据您使用的 Java 版本,您可以进一步减少此代码并利用更新的方法和变量定义。
例如,在 Java 11+ 中,如果在创建时分配了值,则不需要定义变量的类型。换句话说,这样做是多余的。
所以定义
Scanner read = new Scanner(System.in);
String site = read.nextLine();
可能变成
var read = new Scanner(System.in);
var site = read.nextLine();
您可以通过在 Java 17 中编写 switch
语句的功能性方式进一步改进代码:
所以switch语句可以变成如下:
private static String getEmr(String inputString)
return switch (inputString)
case "site1" -> "sampletext";
case "site2" -> "domain";
default -> " ";
;
【讨论】:
【参考方案3】:你只需要在 if 语句之外声明 emr 变量。
我已将您的代码更改如下,正如@chaitanya-guruprasad 提到的,在比较对象和字符串时最好使用“equals”方法。因此,我添加了我错过的内容。抱歉我的延误@nick-tagliamonte。
import java.util.Scanner;
public class Program
public static void main(String[] args)
Scanner read = new Scanner(System.in);
String site = read.nextLine();
String emr;
if (site.equals("site1"))
emr = "sampletext";
else if (site == "site2")
emr = "domain";
else
emr = " ";
System.out.print(emr);
【讨论】:
以上是关于如何根据另一个变量设置变量的值?的主要内容,如果未能解决你的问题,请参考以下文章