2016-12-09 1 views
0
class coding 
{ 
    int a; 
    public int setdata(int feet,int inches) 
    { 
     if (feet || inches < 0) 
     { 
      Console.WriteLine("invalid"); 

     } 
     a = 12 * feet + inches; 

     else { return a; } 

    } 
    public void display() 
    { 
     Console.WriteLine("the inches is" + a); 
    } 
} 

int und bool angewendet werden ich auf dieser Linie ein Problem habe:Bediener || kann nicht

if (feet || inches < 0) 

Ich bin nicht immer, warum dieses Thema ist.

+1

Sie müssen die Vergleiche aufteilen: 'if (Fuß <0 || Zoll <0)'. Auf diese Weise sind beide Seiten von '||' boolesch. –

+1

Sie können auch nicht einfach eine "else" -Klausel haben - sie muss direkt nach der "if" -Klausel kommen. –

+0

Ich bezweifle, dass es eine Sprache gibt, in der '(Fuß || Zoll <0)' in 'entweder Fuß oder Zoll ist negativ 'übersetzt wird. Die meisten Sprachen würden eine solche Operation als bitweises ODER interpretieren. –

Antwort

1

Nehmen wir an, die Zahlen waren unterschiedlich:

„Ich will dies einzugeben if Aussage, wenn feet einen Wert kleiner als X hat, oder inches hat einen Wert kleiner als Y ".

The if wäre dann:

if (feet < X || inches < Y) 
{ 
    // condition met 
} 

Die gleiche Syntax gilt für alle Werte von X und Y. Stellen Sie nun X auf 0 und Y auf 0.

+0

danke .. geschätzt –

+0

Gern geschehen. Sie können die Antwort aufheben, wenn sie Ihnen geholfen hat, oder sie als akzeptiert markieren, wenn sie Ihre Frage beantwortet. Sie sollten dies für alle Antworten tun, die Sie nützlich fanden. – trashr0x

+0

ohh .. ich bin ein neuer Benutzer dieses Stack-Überlaufs. deshalb –

6

Wenn die Anweisung booleschen Ausdruck erwartet, müssen Sie schreiben, wenn die Bedingung Ihres int-Werts ungültig ist. Sie können Ihren Code wie folgt neu zu gestalten:

public int setdata(int feet,int inches) 
{ 
    if(feet < 0 || inches < 0) 
    { 
     return -1; 
    } 

    return 12 * feet + inches; 
} 

Danach, wenn Sie SetData-Methode aufrufen

int result = setdata(feet, inches); 
if(result == -1) 
{ 
    Console.WriteLine($"Your input for inches:{inches} or feet:{feet} is invalid"); 
} 
4

diese Zeile:

if (feet || inches < 0) 

ist ein sehr "natürliche Sprache Ansatz". Es wäre wirklich schön, wenn Sie nur so programmieren könnten, wie Sie sprechen, aber die Compiler-Sprache verlangt, dass jeder Fall detailliert spezifiziert wird.

Auf jeder Seite des ||-Operators erwartet der Compiler eine bool Variable. Also ist es verwirrt. Sie müssen explizit jeden Fall angeben:

if (feet < 0 || inches < 0) 

die Rückkehr Ergebnis dieses Vergleichs (feet < 0) vom Typ ist bool

0

Für jeden Booleschen Ausdruck, Sie haben zweimal den Ausdruck zu schreiben, jedes Mal, wenn Sie eine machen Entscheidung ausdrücklich so dass der Compiler weiß genau, was zu tun ist:

if (feet < 0 || inches < 0) 

das Gleiche gilt mit &&:

if (feet < 0 && inches < 0) 
0

Die || Der Operator prüft mindestens einen der Operanden auf jeder Seite. Hier haben Sie zwei Ganzzahlen an beiden Seiten von || Operator, der einen Fehler auslöst. So sollte es sein wie

if(feet < 0 || inches < 0) 
0

Ist es nicht möglich zu setzen, sagen

myData.setdata(3, -1); 

die "drei Fuß ohne Zoll" bedeutet? Wenn es der Fall

public int setdata(int feet,int inches) { 
    // compute length 
    int value = 12 * feet + inches; 

    // if the length is invalid, throw the exception 
    if (value < 0) { 
    if (feet < 0) 
     throw ArgumentOutOfRangeExample("feet"); 
    else  
     throw ArgumentOutOfRangeExample("inches"); 
    } 

    a = value; 

    return value; 
} 

Oder (wenn Sie nicht haben, Ausnahmen wollen geworfen)

public int setdata(int feet,int inches) { 
    // compute length 
    int value = 12 * feet + inches; 

    // if the length is valid, assign it to a 
    if (value >= 0) 
    a = value; 
    else 
    Console.WriteLine("invalid"); 

    return a; 
} 
+0

zweite Antwort ist würdig. –

Verwandte Themen