如何根据另一个变量设置变量的值?
How do I set the value of a variable based on another variable?
我正在尝试为名为 site 的变量获取扫描仪输入,并根据为 site 输入的内容将另一个变量 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 的理解(显然)充其量是有限的,我是最近才开始的。
你只需要在 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);
}
}
每个变量的范围在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);
}
}
尽管其他答案也可行,但我鼓励您拆分检查给出的输入值和分配响应值的逻辑。
查看以下内容:
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 -> " ";
};
}
我正在尝试为名为 site 的变量获取扫描仪输入,并根据为 site 输入的内容将另一个变量 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 的理解(显然)充其量是有限的,我是最近才开始的。
你只需要在 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);
}
}
每个变量的范围在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);
}
}
尽管其他答案也可行,但我鼓励您拆分检查给出的输入值和分配响应值的逻辑。
查看以下内容:
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 -> " ";
};
}