2016-05-13 2 views
-2

Это просто классное упражнение, над которым я работаю. (Я очень новичок в программировании, поэтому, если это была простая ошибка «новичков», я приношу свои извинения за то, что трачу ваше время.) Я не собираюсь врать: мне трудно знать , где, чтобы вставить определенные фрагменты кода при программировании.Java-программа для ввода ввода между двумя номерами

import java.util.*; 


public class SuperSaveRandallTWyngaardC { 

    static Scanner console=new Scanner(System.in); 

    public static void main(String[] args) { 

     char newCust; 
     char promo; 
     int itemNr=0; 
     int qty=0; 
     int price=0; 
     int totalPrice=0; 
     int custTot=0; 
     int noOfItems=0; 
     int grandTot=0; 
     int custCount=0; 

     System.out.println(" "); 
     System.out.println("*******SuperSave - your friendly local store.....*******"); 
     System.out.println(" "); 
     System.out.print("New customer? (Y/N)>> "); 
     newCust=console.next().charAt(0); 
     newCust=Character.toUpperCase(newCust); 

     while((newCust!='Y')&&(newCust!='N')) 
    { 
     System.out.print("Invalid option, please re-enter (Y/N)>> "); 
     newCust=console.next().charAt(0); 
     newCust=Character.toUpperCase(newCust); 
    } 
    if (newCust == 'N') 
    { 
    System.out.println("*******NO SALES THE WHOLE DAY.....*******"); 
    } 
    else if (newCust == 'Y') 
    { 
    System.out.print("Please enter the item number (1000 -> 5000 or zero for none)>> "); 
    itemNr=console.nextInt(); 

     while ((itemNr<1000)&&(itemNr>5000)||(itemNr!=0)) 
     { 
     System.out.print("Invalid item number, please re-enter (1000 -> 5000 or zero to stop)>> "); 
     itemNr=console.nextInt(); 
     } 
     if (itemNr==0) 
     { 
     System.out.println("*******NO ITEMS WERE BOUGHT BY THIS CUSTOMER.....*******"); 
     } 
     else if ((itemNr>1000)&&(itemNr<5000)) 
     { 
      System.out.print("Enter quantity>> "); 
      qty=console.nextInt(); 
     } 
    } 

    }  

} 

Запустить программу. Пример вывода ...

*******SuperSave - your friendly local store.....******* 

New customer? (Y/N)>> y 
Please enter the item number (1000 -> 5000 or zero for none)>> 1000 
Invalid item number, please re-enter (1000 -> 5000 or zero to stop)>> 5000 
Invalid item number, please re-enter (1000 -> 5000 or zero to stop)>> 999 
Invalid item number, please re-enter (1000 -> 5000 or zero to stop)>> 5001 
Invalid item number, please re-enter (1000 -> 5000 or zero to stop)>> 1234 
Invalid item number, please re-enter (1000 -> 5000 or zero to stop)>> 4000 
Invalid item number, please re-enter (1000 -> 5000 or zero to stop)>> 0 
*******NO ITEMS WERE BOUGHT BY THIS CUSTOMER.....******* 

Петля while говорит, что любой входной номер элемента является недействительным (даже если внутри указанного диапазона 1000-5000)

+0

Что вы хотите сделать? – Areca

+1

Просьба уточнить вашу конкретную проблему или добавить дополнительные сведения, чтобы точно указать, что вам нужно. Как это написано в настоящее время, трудно точно сказать, что вы просите. См. Страницу [Как спросить] (http://stackoverflow.com/help/how-to-ask), чтобы помочь прояснить этот вопрос. – Raju

ответ

1
(itemNr<1000)&&(itemNr>5000)||(itemNr!=0) 

Там нет itemNr, что делает его правда. Рассматривают -1, 1, 1001, 5001.

((itemNr<1000)&&(itemNr!=0))||(itemNr>5000) 

Вы должны попробовать это.

+0

Спасибо, я попробовал, но он по-прежнему делал то же самое с «незаконным началом выражения и ожидаемым» – N3wb

+0

Возможно, некоторые дополнительные фигурные скобки необходимо удалить. Проверьте свой синтаксис. –

0

(itemNr < 1000) && (itemNr > 5000) Номер товара должен быть меньше 1000 И более 5000 в то же время, это невозможно.

Вы делаете аналогичную проверку позже с (itemNr > 1000) && (itemNr < 5000).

Было бы полезно сделать функцию isInRange(int), которая проверит эту проверку. Таким образом, вы можете использовать !isInRange(itemNr) (не в радиусе) для первой проверки.

Вторая проверка не требуется, поскольку номер всегда будет находиться в диапазоне (или 0) после цикла while.

private static boolean isInRange(int i) { 
    return ((i > 1000) && (i < 5000)); 
} 

... 

while(!isInRange(itemNr) && itemNr != 0) { 
    ... 
} 

if (itemNr == 0) { 
    ... 
} else { // no need to check here 
    ... 
} 
+0

'while (! IsInRange (itemNr) || itemNr! = 0)' Все еще неправильно. Thjs будет верно для любого числа. – FredK

0

Чтобы исправить проверку допустимых входов, 1000 ... 5000 и 0, обновить
while ((itemNr<1000)&&(itemNr>5000)||(itemNr!=0))
в
while ((itemNr < 1000 && itemNr != 0) || itemNr > 5000)

Если 1000 и 5000 являются действительными входы, то вы должны включать их при получении количества.
else if ((itemNr>1000)&&(itemNr<5000))
в
else if ((itemNr >= 1000) && (itemNr <= 5000))

Так что последний блок будет выглядеть

while ((itemNr < 1000 && itemNr != 0) || itemNr > 5000) { 
    System.out.print("Invalid item nyumber, please re-enter (1000 -> 5000 or zero to stop)>> "); 
    itemNr = console.nextInt(); 
} 
if (itemNr == 0) { 
    System.out.println("*******NO ITEMS WERE BOUGHT BY THIS CUSTOMER.....*******"); 
} else if ((itemNr >= 1000) && (itemNr <= 5000)) { 
    System.out.print("Enter quantity>> "); 
    qty = console.nextInt(); 
} 
2

Ваше условие цикла выключен.

С негативов, кажется, путают, сначала написать, что это хорошо:

(itemNr >= 1000 && itemNr <= 5000) || itemNr == 0 

Т.е. должно быть от 1000 до 5000 (включительно), OR должно быть 0.

Поскольку большинство людей не могут получить приоритет && против || прав, вы должны всегда использовать скобки для явного указания приоритета при смешивании их, как я только что сделал.

Это делает реверсивное выражение легко, так как вы просто реверс все, и оставить в покое скобки:

(itemNr < 1000 || itemNr > 5000) && itemNr != 0  // correct #1 

Сравните это с тем, что у вас, и вы увидите проблему:

(itemNr < 1000) && (itemNr > 5000) || (itemNr != 0) // wrong 

поскольку > 5000 означает, что это определенно != 0, вы можете изменить выражение, как это, как и другие показали:

(itemNr < 1000 && itemNr != 0) || itemNr > 5000  // correct #2 

Технически, # 2 работает лучше, чем # 1, но это разница, вы не будете когда-либо уведомление. Лично я считаю, что № 2 менее интуитивно понятен, чем № 1, но это вопрос мнения. Они оба хотят, чтобы вы захотели.

Смежные вопросы