2016-05-13 43 views
-2

Dies ist eine einfache Übung an der ich arbeite. (Ich bin sehr neu in der Programmierung, wenn das ein einfacher Anfängerfehler war, entschuldige ich mich für die Verschwendung Ihrer Zeit.) Ich werde nicht lügen: Ich finde es schwierig zu wissen wo bestimmte Stücke einfügen Code beim Programmieren.Java-Programm zur Eingabe zwischen 2 Zahlen

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(); 
     } 
    } 

    }  

} 

Führen Sie das Programm aus. Beispielausgabe ...

*******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.....******* 

Die while sagt Schleife, dass jede Artikelnummer Eingabe ungültig ist (auch wenn im angegebenen Bereich von 1000-5000)

+0

Was möchten Sie tun? – Areca

+1

Bitte klären Sie Ihr spezifisches Problem oder fügen Sie weitere Details hinzu, um genau das hervorzuheben, was Sie benötigen. Wie es derzeit geschrieben wird, ist es schwer zu sagen, was genau Sie fragen. Informationen zur Klärung dieser Frage finden Sie auf der Seite [Wie Sie fragen] (http://stackoverflow.com/help/how-to-ask). – Raju

Antwort

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

Es gibt keine ItemNr ist, dass es macht wahr. Erwägen -1, 1, 1001, 5001.

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

Sie sollten dies versuchen.

+0

Danke, ich habe es versucht, aber es hat immer noch das Gleiche mit "illegalem Beginn des Ausdrucks und; erwartet" – N3wb

+0

Vielleicht gibt es einige extra geschweifte Klammern müssen entfernt werden. Überprüfe deine Syntax. –

0

(itemNr < 1000) && (itemNr > 5000) Artikelnummer muss kleiner als 1000 UND größer als 5000 zur gleichen Zeit, das ist nicht möglich.

Sie machen eine ähnliche Überprüfung später mit (itemNr > 1000) && (itemNr < 5000).

Es wäre nützlich, eine Funktion isInRange(int) zu machen, die diese Überprüfung durchführt. Sie können !isInRange(itemNr) (nicht im Bereich) für die erste Überprüfung verwenden.

Die zweite Prüfung wird nicht benötigt, da die Nummer nach der while-Schleife immer im Bereich (oder 0) liegt.

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)' Immer noch falsch. Thjs wird für jede Zahl wahr sein. – FredK

0

Um die Prüfung für gültige Eingaben zu korrigieren, 1000 ... 5000 und 0, aktualisiert
while ((itemNr<1000)&&(itemNr>5000)||(itemNr!=0))
zu
while ((itemNr < 1000 && itemNr != 0) || itemNr > 5000)

Wenn 1000 und 5000 gelten Eingänge, dann Sie müssen sie einschließen, während Sie die Menge erhalten.
else if ((itemNr>1000)&&(itemNr<5000))
zu
else if ((itemNr >= 1000) && (itemNr <= 5000))

wird also der letzte Block aussehen

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

Ihre Schleife Zustand ausgeschaltet ist.

Da die Negative scheint, zuerst schreiben zu verwechseln, was gut ist:

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

D.h. muss zwischen 1000 und 5000 (inklusive) liegen, ODER muss 0 sein.

Da die meisten Menschen nicht den Vorrang && vs || Recht bekommen können, sollten Sie immer Verwendung Klammer ausdrücklich den Vorrang zu geben, wenn sie mischen, wie ich gerade tat.

Dies macht den Ausdruck einfach Umkehr, da man einfach alles umkehren, und lassen Sie die Klammer allein:

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

dass vergleichen, was man hatte, und Sie sehen das Problem:

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

da > 5000 bedeutet, dass es auf jeden Fall != 0 ist, können Sie den Ausdruck wie folgt neu anordnen können, wie andere gezeigt haben:

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

Technisch gesehen, # 2 führt besser als # 1, aber das ist ein Unterschied, den Sie nicht jemals bemerken werden. Persönlich finde ich # 2 weniger intuitiv als # 1, aber das ist eine Frage der Meinung. Sie bekommen beide, dass du willst, dass du willst.