如何根据另一个变量设置变量的值?

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";
}

因为 ifelse 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);
    }
}

在比较 ObjectsString 时,您需要小心。您可能想看看已接受的答案 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 -> " ";
    };
  }