Je crée une application pour déterminer le montant des taxes que vous payez.
L'utilisateur entre le salaire et le code va, le calcule et renvoie la valeur.
J'ai du mal à utiliser les méthodes qui appartiennent à différentes classes comme la taxe. L'erreur se produit sur la ligne tax tax1 = new tax(salaryAmount);.
Une ligne rouge apparaît et dit, "ne peut pas être appliqué au double".

Toute aide serait très appréciée.

public void convert() {
    EditText salaryAmountEditText = (EditText) findViewById(R.id.salaryAmountEditText);
    double salaryAmount = Double.parseDouble(salaryAmountEditText.toString());
    TextView textView = (TextView) findViewById(R.id.textView);
    tax tax1 = new tax(salaryAmount);
    Double pocketAmount = salaryAmount - tax1 ;

} 
public class tax {

    public double Tax(double money) {
        Double tax1;
        if (money < 11000) {
            tax1 = 0.0;
        } else if ( 11000 < money && money<45000) {
            tax1 = (money -11000)*0.2;
        } else if(45000 < money && money<150000){
            tax1 = 68000 + ((money - 45000)*0.4);
        } else {
            tax1 = 6800 + 42000 + ( (money - 150000)*0.45 );
        }
        return tax1;
    }

}
0
mathsislife 24 nov. 2017 à 17:01

3 réponses

Meilleure réponse

Vous avez défini une méthode, mais vous avez appelé un constructeur. Pour appeler votre méthode, vous avez besoin d'une instance (en appelant un constructeur), mais les constructeurs n'ont aucun type de retour ...

En d'autres termes, vous en avez besoin

tax t = new tax();
double tax1 = t.Tax(salaryAmount);

Une autre option, cependant, vous pouvez utiliser une méthode static. (En passant, vous n'avez même pas besoin d'une classe séparée, car vous pouvez déplacer cette méthode dans votre activité)

public class tax {

    public static double Tax(double money) {

Et pour le calculer, vous utiliseriez comme ça.

double tax1 = tax.Tax(salaryAmount);
double pocketAmount = salaryAmount - tax1 ;

Puisque votre méthode renvoie un double, ce n'est pas une instance de la classe tax, vous pouvez donc faire la soustraction

1
OneCricketeer 24 nov. 2017 à 15:36

Il semble que vous soyez confus entre votre classe et les méthodes qu'elle contient.

La méthode public double Tax(double salaryAmount) n'est pas statique, et nécessite donc une instance de l'objet à appeler.

Ainsi, votre code ressemblerait à ceci:

tax tax1 = new tax(); double computedTax = tax1.Tax(salaryAmount);

Par ailleurs, la convention consiste à mettre en majuscule le nom de la classe et les noms de méthode camelCase. Cela donnerait à votre classe un aspect public class Tax et à votre signature de méthode public double tax(double salaryAmount)

0
Farwatch 24 nov. 2017 à 14:12

Votre classe tax n'a pas de constructeur qui accepte un double comme paramètre d'entrée (c'est-à-dire)

public tax(Double tax){}

De plus, vous enfreignez la convention Java en ayant le nom d'une classe en minuscules et celui de la méthode avec une majuscule. Utilisez plutôt camelCase pour les méthodes et utilisez une majuscule pour la lettre de départ de toutes les classes.

0
Mercato 24 nov. 2017 à 14:07
47474889