【问题标题】:Java error, Duplicate Variable Error in Java, cannot convert from String to Class [duplicate]Java错误,Java中的重复变量错误,无法从字符串转换为类[重复]
【发布时间】:2021-09-13 05:48:31
【问题描述】:

我正在尝试为作业调试我的代码错误(我对 Java 还是很陌生)。

public static void main(String[] args) throws Exception {
    System.out.println("Hi, Welcome!");
    
    Scanner inpt = new Scanner(System.in); 
    System.out.print("What can I call u? : ");
    String user = inpt.nextLine();
    Pelanggan user = new Pelanggan();
    }

“Pelanggan”是我创建的类的名称。 我想将 user 的值分配给 Pelanggan 类,但出现此错误

Duplicate local variable user

然后我试着把代码改成这个

public static void main(String[] args) throws Exception {
    System.out.println("Hi, Welcome!");
    
    Scanner inpt = new Scanner(System.in); 
    System.out.print("What can I call u? : ");
    Pelanggan user = inpt.nextLine();
    user = new Pelanggan();
    }

然后我得到了这个错误

Type mismatch: cannot convert from String to Pelanggan

我已尝试寻找解决方案,但仍未找到在我的代码上制定的解决方案。

我该如何解决这个问题?

任何帮助将不胜感激! 谢谢

【问题讨论】:

  • 你有两个同名的变量。只需重命名其中一个。关于您的改进: nextLine 读取 String => Pelanggan user = inpt.nextLine(); Pelanggan 不是字符串,因此它必须映射到 Pelanggan 的实例,如何映射取决于您的 Pelanggan 类
  • 首先你需要了解核心java的opps概念和其他然后你会尝试编码
  • @Joe 不,这是 OP 已经纠正的第一个问题

标签: java visual-studio-code


【解决方案1】:

假设Pelanggan 类,您应该在Pelanggan 类中创建一个String 字段并像这样实现它:

public class Pelanggan {
   String name;

   Pelanggan(String name) {
       this.name = name
   }
}

以及代码的主要部分:

public static void main(String[] args) throws Exception {
    System.out.println("Hi, Welcome!");
    
    Scanner inpt = new Scanner(System.in); //variabel simpan inputan nama user 
    System.out.print("What can I call u? : ");
    Pelanggan user = new Pelanggan(inpt.nextLine());
    }

Pelanggan 类可能与我认为的解决方案不同。主要思想是:如果你想在你的类中存储一个String,你可以将它存储为一个字段并将它作为参数提供给你的类的构造函数。

【讨论】:

  • 您正在对 Pelanggan 类做出假设,而您在不了解更多细节的情况下是无法做出的。据我们所知,Pelanggan 应该包含一个基于输入的数值
【解决方案2】:

Java 中的指针分为三个部分。

Type name = value;
  • Type 是指针要保存的数据类型。

  • name 是我们在代码中寻址指针的方式。

  • value 是指针指向的数据。

当你声明一个像这样的指针时

String user = "John Doe";

你告诉编译器两件事。

    1. 我有一个指向 String 对象的指针。
    1. 我将调用该字符串 user

您现在可以在可能需要 String 数据类型的任何地方使用存储在 user 中的值。但是,您不能再声明另一个

MyClass user = new MyClass();

现在编译器很困惑,因为你已经定义了一个名为user 的指针,所以你得到一个重新声明错误。 (范围在这里很重要,因为您可以在不同的范围内再次定义它,但这超出了此答案的范围)。

你的第二个问题呢?

你完全可以改变一个指针的值(如果它不是一个最终的指针),但是这个

String user = "John Doe";
user = new MyClass();

不会编译,因为您告诉编译器user 是对字符串的引用。 MyClass 不是字符串(它可能是字符串的子类,但这又超出了此答案的范围),因此它会给您一个类型不匹配错误。

简单的答案是为每个指针使用不同的名称。如果您真的希望您对 Palanggan 实例的引用为 user,则将您的字符串指针命名为其他名称。

【讨论】:

  • 您好,谢谢您的解释。现在我知道是什么导致我的代码出错了。这是信息,谢谢!
【解决方案3】:

检查返回类型: 字符串 java.util.Scanner.nextLine()

所以最好在 Pelanggan 类中有变量并在方法或构造函数中设置

【讨论】:

    猜你喜欢
    • 2012-07-21
    • 2018-07-05
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 2020-11-02
    • 2017-01-31
    相关资源
    最近更新 更多