2016-04-07 2 views
0

У меня возникла проблема и проблема со школьным кодом Java. Я должен сделать 3 части:Использование do-while дважды?

A - введите номер пользователя, прочитайте его, проверьте, положительно или отрицательно, с помощью булева, а затем необходимо проверить и просто принять, что они должны быть между 20 и 100. Если нет, программа должна зацикливать запрос на принятое число.

B - укажите нечетные числа между 0 и вставленным числом и суммируйте их.

C - После создания и запуска секций A и B вы должны ввести необходимые изменения в программу, которые необходимо повторить дважды, чтобы ввести предельные значения и показать их нечетные и их сумму. То есть разделы будут повторяться два раза A + B. Для управления им необходимо использовать структуру типа do-while. (Копировать/вставить его)

Вот что я на данный момент:

import java.util.Scanner; 

public class School_Proj1 { 

    public static void main(String[] args) { 
     Scanner scanner = new Scanner(System.in); 

     int number = 0; 
     boolean positive = false; 
     int sum = 0; 

     do { 
      System.out.print("Input a number: "); 
      number = scanner.nextInt(); 
      scanner.nextLine(); 
     } while(!positive && (number <20) || (number>100)); 

     System.out.println("Number input OK [ "+number+" ]" 
      + "\n\nLet's go to the next phase!\n\n" 
      + "The odd numbers until [ "+number+" ] are: "); 

     for(int i=0; i <= number; i++){ 
      if (i%2 !=0){ 
       System.out.print(i + " "); 
       sum = sum + i; 
      } 
     } 
     System.out.println("\nAnd the sum of the odd numbers until [ "+number+" ] are: " + sum); 
    } 
} 

Моя забота: я правильно применил булево там или нет, не делать ничего?

И главная проблема заключается в том, что я не могу выполнить часть (C). Как я могу снова использовать do-while и заставить его это сделать?

Заранее спасибо! Любая помощь любезно принята!

+1

Ваш логический 'позитивный' делает - эффективно - ничего. Вы никогда не присваиваете ему ничего (кроме начального значения 'false'.) – AJNeufeld

+0

Я боялся этого, но хотел ошибаться об этом :) –

ответ

0

Вы очень близки, просто добавьте еще один цикл и инициализировать сумму в нужном месте ...

Scanner scanner = new Scanner(System.in); 

    int number = 0; 
    int sum; 
    int entries = 0; 
    boolean positive; 

    do 
    { 
     sum = 0; 
     do 
     { 
      System.out.print("Input a number: "); 
      number = scanner.nextInt(); 

      if (number < 0) 
      { 
       positive = false; 
      } 
      else 
      { 
       positive = true; 
      } 

      scanner.nextLine(); 
     } 
     while ((positive == false) || (number < 20) || (number > 100)); 

     System.out.println("Number input OK [ " + number + " ]" 
      + "\n\nLet's go to the next phase!\n\n" 
      + "The odd numbers until [ " + number + " ] are: "); 

     for (int i = 0; i <= number; i++) 
     { 
      if (i % 2 != 0) 
      { 
       System.out.print(i + " "); 
       sum = sum + i; 
      } 
     } 
     System.out.println("\nAnd the sum of the odd numbers until [ " + number + " ] are: " + sum); 
    } 
    while (++entries < 2); 

} 
+0

спасибо за хороший улов Андрей –

+0

О, я был как-то близок. Я ожидал чего-то более сложного :-) Спасибо! Можете ли вы, пожалуйста, направить меня с булевым значением? Похоже, я помещал это неправильно. : -s –

+0

Я бы упростил код, все, что вам нужно, это убедиться, что кто-то попадает в положительное значение. Лучший код прост для чтения. Я делаю редактирование. –

0

Вы создаете boolean значения из тестов, таких как:

number < 20 

или

number > 100 

или даже

(number < 20) || (number > 100) 

Эти выражения boolean могут быть присвоены значениям boolean переменных.

Так что вам нужно:

положительное = число> 0;

0

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

!false 

, но это всегда так! На самом деле вы проверяете, верно ли false = true, и это всегда верно.

Здесь нет необходимости использовать логическое значение, положить

number <20 || number>100 

в Do While и достаточно.

Для C части добавить делать, а что «оборачивает» ваш код, используя целое число рассчитывать, пока не дойдете до двух циклов

cycle = 0; 
do { 
    cycle++; 
    // your previous code 
} while (cycle < 2); 
0

булевых положительного ничего не делать, так как он никогда не был изменен, на время (! positive ...), первая половина всегда будет истиной. Кроме того, вопрос задается путаным: если он находится между 20 и 100, он должен быть положительным, тогда зачем проверять + или -? Измените его на это, возможно, будет работать

import java.util.Scanner; 

public class School_Proj1 { 
public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 

    int number = 0; 
    boolean positive = false; 
    int sum = 0; 
    int count = 0 
do{ 
do { 
    System.out.print("Input a number: "); 
    number = scanner.nextInt(); 
    positive = (number > 0)? true:false; 
} while(positive && !(number <= 20) || (number >= 100)); 

System.out.println("Number input OK [ "+number+" ]" 
     + "\n\nLet's go to the next phase!\n\n" 
     + "The odd numbers until [ "+number+" ] are: "); 

for(int i=0; i <= number; i++){ 
    if (i%2 !=0){ 
     System.out.print(i + " "); 
     sum = sum + i; 
    } 
} 
    System.out.println("\nAnd the sum of the odd numbers until [ "+number+" ] are: " + sum); 
}while(++count <= 2); 
} 
Смежные вопросы