почему мой цикл while пропускается?значения еще не были соблюдены - PullRequest
0 голосов
/ 26 октября 2018

поэтому раздел кода, который у меня есть ниже - что он в конечном итоге должен сделать - это создать дерево.область, с которой у меня в настоящее время проблема, заставляет пользователя отвечать, хочет украшения или нет.Я хотел бы, чтобы цикл while продолжал заставлять пользователя вводить значение до тех пор, пока число не станет равным 1 или 0. Но то, что он делает, это использует «int jewelry = s.nextInt ();» вне цикла ипросто пропускает время

.

.

раздел, который не работает, является очень важной частью, и мой код не будет работать без него

import java.util.Scanner;
class Main {
  public static void main(String[] args) {
    Scanner s = new Scanner(System.in);

/*
    __________________________________INPUTS_____________________________________
*/    

      //Tree
    System.out.println("Tree size");
    int tree = s.nextInt();

проблема начинается здесь

      //Decorations

    System.out.println("Decorations");
    int decorations = s.nextInt();
    System.out.println();
    while (decorations < 2 && decorations > -1){
      System.out.println("(y = 1 || n = 0) ");
      decorations = s.nextInt();
    }

проблема заканчивается ^^^

Я пытался написать код с if в течение некоторого времени и повторять время, пока логическое значение не установится в true

int tf = 0;
  while (tf != true){
    System.out.println("(y = 1 || n = 0) ");
    int decorations = s.nextInt();
    if(decorations == 1 || decorations == 0 ){
      decor = true;  
    }
  }

Могу ли я дать несколько советовна что починить?Я все еще очень плохо знаком с Java.спасибо за любую помощь

Ответы [ 3 ]

0 голосов
/ 26 октября 2018
while (decorations < 2 && decorations > -1){
  System.out.println("(y = 1 || n = 0) ");
  decorations = s.nextInt();
}

Вы хотите продолжать цикл, пока ввод недопустим.Но если decorations меньше 2 и больше -1, ввод действителен.Итак, ваш тест задом наперед.

0 голосов
/ 26 октября 2018

Второй код, который вы сравниваете int с логическим значением

, вам нужно изменить флаг ("tf") на логический

boolean tf = false;
while(!tf) { // by using ! we can get the oposite
 tf = decorations == 1 || decorations == 0 ? true : false;
 // do your code
}

троичный?: если еще в одной строке, это эквивалент

if(decorations == 1 || decorations == 0) 
    tf = true;
else
    tf = false;
0 голосов
/ 26 октября 2018

Можете ли вы поделиться примером ввода и вывода вашей проблемы?

Если вы хотите это:

"Я бы хотел, чтобы цикл while продолжал заставлять пользователя вводить значение до числаравно 1 или 0. "

Это может сделать:

  int decorations = s.nextInt();
    while(decorations != 1 && decorations !=0){
       System.out.println("(y = 1 || n = 0) ");
       decorations = s.nextInt();
    }
...