Проблемы с установщиками в Java — Программа выставления интернет-счетов

#java #io #setter #getter

#java #io #установщик #средство получения

Вопрос:

Привет, у меня возникли некоторые проблемы с присвоением значений в объекте, который я пытаюсь создать, он вызывает переменную, которую я установил изначально, а не ту, которую я установил с помощью моего метода setter, странно то, что, похоже, она правильно проходит через первый сканер, поскольку мой математический метод работает так, как должен, вот код:

Главная

 package a2.internetbill;
import java.util.Scanner;

public class A2InternetBill {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    String type = "A";
    int nUsage = 0;
    String nAccountName = "Bob";
    // inititates objects
    Packages newPackageA = new Packages(type, nUsage, nAccountName, 0.0);

    Scanner in = new Scanner(System.in);

    //
    System.out.println("Please enter a package type(Must be A, B, C or D):nr");
    type = in.nextLine();
    newPackageA.setPackageType(type);

    System.out.println("Please Enter Your Name:nr ");

    newPackageA.setAccountName(in.nextLine());

    System.out.println("Please enter how much GB of Data you used: nr");

    newPackageA.setUsage(in.nextInt());


    String outPut;
    // do maths and prints formatted toString method
    newPackageA.moneyMath(type, nUsage, nUsage);
    outPut = newPackageA.toString();
    System.out.println(outPut);
    System.out.println(newPackageA.getAccountName()   newPackageA.getUsage()   newPackageA.getPackageType());
    // TODO code application logic here
        // instance variables

}
  

}

класс

     /*
 * Makes internet package for specific user
 */
package a2.internetbill;

/**
 * 4 packages are:
 * PACKAGE A (IGNITE_60): 200GB usage for $49.99 per month. 
 * Extra usage is $3.00 per GB.
 * 
    PACKAGE B (IGNITE_30): 125GB usage for $39.99 per month. 
    * Extra usage is $1.50 per GB.
    PACKAGE C (INTERNET_5): 25GB usage for $24.99 per month. 
    * Extra usage is $5 per GB.

    PACKAGE D (UNLIMITED_USAGE): For $69.99 per month 
    * unlimited access is provided.

 * @author sav
 */


    public class Packages {
    private String packageType;
    private int usage;
    private String accountName;
    public double runningTotal;


    //initiates a Packages object
    public Packages(String type, int nUsage, String nAccountName, double nRunningTotal){
        packageType = type;
        usage = nUsage;
        accountName = nAccountName;
        runningTotal = nRunningTotal;

    }


    // getters
    public String getPackageType(){
        return packageType;
    }

    public int getUsage(){
        return usage;
    }

    public String getAccountName(){
        return accountName;
    }

    // setters     
    public void setPackageType(String type){
        type = packageType;
    }
    public void setUsage(int nUsage){
        nUsage = usage;

    }
    public void setAccountName(String nAccountName){
        nAccountName = accountName;
    }     

    public void moneyMath(String type, int nUsage, double nRunningTotal){
        if (type.equals("A")){
            if (nUsage>=200){
                nRunningTotal = ((nUsage - 200) * 3)   49.99;
                type = "Ignite_60";
                packageType = type;

            }
            else{
                nRunningTotal = 49.99;
                type = "Ignite_60";
                packageType = type;
            }
        }
        else if (type.equals("B")){
            if (nUsage>=125){
                nRunningTotal = ((nUsage - 125) * 1.5)   39.99;
                type = "Ignite_30";
                packageType = type;
            }
            else{
                nRunningTotal = 39.99;
                type = "Ignite_30";
                packageType = type;
            }
        }
        else if (type.equals("C")){
            if (nUsage>=25){
                nRunningTotal = ((nUsage - 25) * 5)   24.99;
                type = "Internet_5";
                packageType = type;
            }
            else{
                nRunningTotal = 24.99;
                type = "Internet_5";
                packageType = type;
            }
        }
        else if (type.equals("D")){
            nRunningTotal = 69.99;
            type = "Unlimited_Usage";
            packageType = type;
        }
        else{
            System.out.println("Something something something");
        }



    }

    // 

    /**
     * Modified toString for specified outputs(formatted as assigned)
     * @return
     */
    @Override
    public String toString(){
        return ("Dear, nr"   accountName   " nr You have selected the : "   packageType   " package, and your current amount due is: $"   runningTotal);

    }
}
  

Пожалуйста, дайте мне знать, как правильно использовать сканер (я думаю, что именно это вызывает проблему прямо сейчас), большое вам спасибо,

Ответ №1:

Ваши настройки неверны.

 public void setPackageType(String type){
    type = packageType;
}
public void setUsage(int nUsage){
    nUsage = usage;
}
public void setAccountName(String nAccountName){
    nAccountName = accountName;
}   
  

Должно быть,

 public void setAccountName(String nAccountName){
    accountName = nAccountName;
}   
public void setPackageType(String type){
    packageType = type;
}
public void setUsage(int nUsage){
    usage = nUsage;
}