Если заявление всегда дает один и тот же ответ - PullRequest
1 голос
/ 15 июня 2011
import java.util.Scanner;

class Practice {

public static void main(String args[]) {

    System.out.println("Enter the number of treats you have:");
    Scanner treatsScanner = new Scanner(System.in);
    int treats = (treatsScanner.nextInt());

    System.out.println("Enter the number of hamsters you have:");
    Scanner hamstersScanner = new Scanner(System.in);
    int hamsters = (hamstersScanner.nextInt());

    System.out.println("How many treats does each hamster need?");
    Scanner neededTreatsScanner = new Scanner(System.in);
    int neededTreats = (neededTreatsScanner.nextInt());     

    int treatsPerHamster = treats / hamsters;
    boolean enoughTreats = treatsPerHamster >= neededTreats;        

    if (enoughTreats = true) {
        System.out.println("There are enough treats for all the hamsters!");
    }
    else if (enoughTreats = false) {
        System.out.println("Oh no! There aren't enough treats!");        
    }

}
}

Может кто-нибудь объяснить мне, почему эта программа возвращает "Достаточно угощений для всех хомяков!" независимо от того, нужно ли "requiredTreats"> "лечить PerHamster"?

Спасибо.

Ответы [ 7 ]

7 голосов
/ 15 июня 2011

Вы должны использовать == вместо =

    if (enoughTreats == true) {
        System.out.println("There are enough treats for all the hamsters!");
    }
    else {
        System.out.println("Oh no! There aren't enough treats!");        
    }

Помните, что == является оператором сравнения, а = является оператором присваивания.

И как Майкупомянуто, просто наличие if(enoughTreats) поможет вам.Нет необходимости использовать оператор ==!

На самом деле вам не нужна логическая переменная enoughTreats.Вы можете просто написать свое состояние так:

if (treatsPerHamster >= neededTreats) {
    // do one thing
}
else {
    // do other
}
4 голосов
/ 15 июня 2011

Вы присваиваете значение true всем существующим.

Попробуйте использовать оператор равенства вместо присваивания:

if (enoughtreats == true) {
...
}

или просто:

if(enoughtreats) {
...
}
3 голосов
/ 15 июня 2011

В java оператор '=' присваивает значение переменной. В этом случае

if (enoughTreats = true)

присваивает значение 'true' для 'достаточного количества обработок', а затем проверяет, является ли 'достаточное количество обращений' истинным (что всегда будет).

Вместо этого вы хотите поставить

if (enoughTreats == true)

, чтобы он проверял, является ли достаточное количество объектов истинным или ложным.

1 голос
/ 15 июня 2011

if (enoughTreats = true)

Используя =, вы назначаете true на enoughTreats. Вместо этого используйте оператор сравнения ==.

1 голос
/ 15 июня 2011

Используйте == для равенства, а не =.

0 голосов
/ 06 июля 2011

Несколько вещей, которые нужно отметить и добавить к перечисленным ответам

  • Достаточно одного сканера Scanner inputScanner = new Scanner(System.in);
  • Скобки вокруг (...Scanner.nextInt()); на самом деле не нужны
  • Возможно, вам придется рассмотреть ненулевую проверку для hamsters!
  • Обрабатывать не входные и целые числа на входе
  • else if(){} не требуется, если if(){} имеет толькоодиночная логическая проверка, достаточно else{
0 голосов
/ 15 июня 2011

Вам нужно изменить эти два оператора

if (enoughTreats = true) 

else if (enoughTreats = false)

на

if (enoughTreats == true) 

else if (enoughTreats == false)

Вы также можете сократить код и получить точно такой же эффект, просто набрав его ниже:

if (enoughTreats)

else

Если вы поместите логическую переменную в круглые скобки оператора if, оператор if проверит, верен ли он, поэтому вам не нужно будет вводить '== true.'Вы также можете заменить оператор else if в своем коде простым «else», потому что, если переменная достаточное количество обращений не равно true, код else будет автоматически выполняться без необходимости специально указывать условие.

...