是否可以使用输入数据来更改对象变量? Java

Is it possible to use input data to change object variables? Java

我一直在尝试使用 Scanner 来请求用户输入,然后将这些输入写入对象以保存它们。 然而,我一直 运行 与静态和非静态变量发生冲突。我对 Static 的理解是,如果我将我的 class 写成静态的,它会阻止我改变它,但是我也不能让我的 Main 语句不是静态的。

import java.util.Scanner;
class Booking{
    public class Ticket{
        int Amount;     //To be used to record how many of a specific ticket are needed.
        int Price =6;
        public void SetAmount(int Order){
            this.Amount = Order;
        } 
    }
    public static void main(String args[]) {
        Scanner myScanner = new Scanner(System.in);
        Ticket Booking = new Ticket();
        System.out.println("How many tickets would you like?")
        int AmountBooked = scan.nextInt();
        Booking.SetAmount(AmountBooked);
    }
}

我相当确定此代码中还有其他错误,但是随着时间的推移,我尝试重新 运行 它并注释掉了这么多不同的部分我确定错误与行 'Ticket Booking = new Ticket();' 因此,如果可以关注这一点,我将不胜感激。

嵌套class不能public,需要是private或者default。而且,如果您想在静态函数(在您的情况下为 main)中访问它,则它需要是静态的。所以,改变

public class Ticket
       to
private static class Ticket

您正在创建 Ticket class 的对象并将其命名为 Booking。 booking是你的publicclass的名字,所以你不能重复使用它来命名你的对象,会造成冲突。将您的变量重命名为其他标识符,例如 "obj" 或 "ticket".

另外,替换

scan.nextInt();
   with
myScanner.nextInt();

您需要创建预订 SetAmount 方法 static。或者您需要创建 class 预订方法的对象来调用方法 SetAmount

喜欢下面的代码:

import java.util.Scanner;
class Booking{
    public  static   class Ticket{
        int Amount;     //To be used to record how many of a specific ticket are needed.
        int Price =6;
        public  void SetAmount(int Order){
            this.Amount = Order;
System.out.println("SetAmount="+Order);
        } 
    }
    public static void main(String args[]) {
      Booking.Ticket ticket=new Booking.Ticket();  
        Scanner scanner = new Scanner(System.in);
        System.out.println("How many tickets would you like?");
        int AmountBooked = scanner.nextInt();
        ticket.SetAmount(AmountBooked);
    }
}

您走在正确的轨道上,请记住您如何命名某些对象扫描仪)并正确使用它们(应用程序完成后将其关闭!)

add/override toString 这样你就可以获得关于对象状态的人类可读的想法

public class PWTest {

    public static void main(String args[]) {
        Scanner myScanner = new Scanner(System.in);
        Ticket booking = new Ticket();
        System.out.println("How many tickets would ...");
        int amountBooked = myScanner.nextInt();
        booking.setAmount(amountBooked);
        System.out.println(booking);
        myScanner.close();
    }
}

class Ticket {
    int amount;
    int price = 6;

    public void setAmount(int Order) {
        amount = Order;
    }

    @Override
    public String toString() {
        return "Ticket [amount=" + amount + ", price=" + price + "]";
    }

}

并查看名称约定 suggested by oracle