Программирование ОО и классов - PullRequest
1 голос
/ 01 февраля 2020

Я пытаюсь это бывший, но я не могу найти проблему; Я могу запустить его, но это не так, как я. Это должен быть выключатель для лампочек; У меня есть мой основной:

import java.util.Scanner;
public class UsoLampadina {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner (System.in);

        // Select the maximum number of clicks
        System.out.println("Selezionare il numero massimo di click:  ");    
        int click = scanner.nextInt();
        char s;
        int i= 0;


        Lampadina lamp = new Lampadina ( click , i);

        while (i >= 0){
            // Select the operation to be performed
            // V = Displays the status of the light bulb
            // C = Change the state of the bulb
            // Enter the selected operation:
            System.out.println("Selezionare l'operazione da eseguire: ");       
            System.out.println("[V] Visualizza lo stato della lampadina"); 
            System.out.println("[C] Cambia lo stato della lampadina"); 
            System.out.println("Immettere l'operazione selezionata: ");         
            s = scanner.next().charAt(0);


            switch (s) {
            case 'V': lamp.Stato(); break;
            case 'C': i = lamp.Click(); break;
            // Select a correct character
            default: System.out.println(" Selezionare un carattere corretto");  
            }
        } 
        // The light bulb broke!!!
        System.out.println("La lampadina si è rotta!!!"); 
        return;




    }

}

Это открывает меню, где вы можете выбрать, чтобы увидеть, включена ли лампа или нет (lamp.Stato ()) или изменить его состояние (выключите, если он включен и наоборот, лампа. Нажмите ()). И мой второй класс:

public class Lampadina {
    public int maxClick; 
    public int c = 0;
    public int i;


    public Lampadina ( int a, int b) {
        a = maxClick;       
        b = i;
    }

    public int Click() {
        while (click >= c ) {
            if ( i == 1 ) {
                c++;
                i = 0;
                return i;
            }
            else if (i == 0) {
                c++;
                i = 1;
                return i;
            }           
        }

        i = -1;
        return i;
    }


    public void Stato () {
        if (i == 0) {
            // The light bulb is off
            System.out.println("La lampadina è spenta");
        }
        else if (i == 1) {
            // The light bulb is on
            System.out.println("La lampadina è accesa");
        }
        else if (i == -1) {
            // The light bulb is broken
            System.out.println("La lampadina è rotta");
        }
    }

}

Здесь у меня есть метод конструктора лампочки; и auxiliares (Нажмите, Stato). «Stato» работает, но у меня есть проблемы с «Click»; он не делает то, что должен: идея в том, что если лампочка выключена (i == 0), то она включается (вернуть i = 1) и наоборот; c - это счетчик, который, когда он достигает значения maxClicks (которое вы вводите в качестве входных данных в качестве параметра параметра «луковица»); лампочка ломается. когда я запускаю программу, она не делает правильное количество циклов, пока не погаснет лампа

Ответы [ 2 ]

3 голосов
/ 01 февраля 2020

Вы устанавливаете параметры a и b в значения, вместо этого устанавливаете значения в параметры

public Lampadina(int a, int b) {
    maxClick=a;       
    i=b;
}
1 голос
/ 01 февраля 2020

Ваша программа нуждается в некоторой коррекции с точки зрения как синтаксиса, так и принципов OOP и Java кодирования и соглашения об именах :

  1. Вы должны изменить доступ модификатор переменных-членов от Lampadina до private.
  2. Поменяйте местами присваивания внутри вашего конструктора. Также рекомендуется использовать имя параметра, такое же, как имя переменной-члена, и использовать, например, this.x = x
  3. В соответствии с соглашением об именах, имя метода, Click должно быть click, а у метода Stato должно быть stato.
  4. Удалите ненужные операторы c++ и return из метода click.
  5. Замените while на if в методе click.
  6. Вы использовали несуществующую переменную, click в while (click >= c). Это должно быть (maxClick >= c).

Ниже приведен код, включающий указанные выше пункты:

import java.util.Scanner;

class Lampadina {
    private int maxClick;
    private int c = 0;
    private int i;

    public Lampadina(int maxClick, int i) {
        this.maxClick = maxClick;
        this.i = i;
    }

    public int click() {
        c++;
        if (c <= maxClick) {
            if (i == 1) {
                i = 0;
            } else if (i == 0) {
                i = 1;
            }
        } else {
            i = -1;
        }
        return i;
    }

    public void stato() {
        if (i == 0) {
            // The light bulb is off
            System.out.println("La lampadina è spenta");
        } else if (i == 1) {
            // The light bulb is on
            System.out.println("La lampadina è accesa");
        } else if (i == -1) {
            // The light bulb is broken
            System.out.println("La lampadina è rotta");
        }
    }
}

public class UsoLampadina {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);

        // Select the maximum number of clicks
        System.out.print("Selezionare il numero massimo di click:  ");
        int click = scanner.nextInt();
        char s;
        int i = 0;

        Lampadina lamp = new Lampadina(click, i);

        while (i >= 0) {
            // Select the operation to be performed
            // V = Displays the status of the light bulb
            // C = Change the state of the bulb
            // Enter the selected operation:
            System.out.println("Selezionare l'operazione da eseguire: ");
            System.out.println("[V] Visualizza lo stato della lampadina");
            System.out.println("[C] Cambia lo stato della lampadina");
            System.out.print("Immettere l'operazione selezionata: ");
            s = scanner.next().charAt(0);

            switch (s) {
            case 'V':
                lamp.stato();
                break;
            case 'C':
                i = lamp.click();
                break;
            // Select a correct character
            default:
                System.out.println(" Selezionare un carattere corretto");
            }
        }
        // The light bulb broke!!!
        System.out.println("La lampadina si è rotta!!!");
        return;
    }
}

Примерный прогон:

Selezionare il numero massimo di click:  2
Selezionare l'operazione da eseguire: 
[V] Visualizza lo stato della lampadina
[C] Cambia lo stato della lampadina
Immettere l'operazione selezionata: V
La lampadina è spenta
Selezionare l'operazione da eseguire: 
[V] Visualizza lo stato della lampadina
[C] Cambia lo stato della lampadina
Immettere l'operazione selezionata: C
Selezionare l'operazione da eseguire: 
[V] Visualizza lo stato della lampadina
[C] Cambia lo stato della lampadina
Immettere l'operazione selezionata: V
La lampadina è accesa
Selezionare l'operazione da eseguire: 
[V] Visualizza lo stato della lampadina
[C] Cambia lo stato della lampadina
Immettere l'operazione selezionata: C
Selezionare l'operazione da eseguire: 
[V] Visualizza lo stato della lampadina
[C] Cambia lo stato della lampadina
Immettere l'operazione selezionata: V
La lampadina è spenta
Selezionare l'operazione da eseguire: 
[V] Visualizza lo stato della lampadina
[C] Cambia lo stato della lampadina
Immettere l'operazione selezionata: C
La lampadina si è rotta!!!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...