C# Unity (c#) Der ||-Operator kann nicht auf Operanden vom Typ "int" und "int" angewendet werden

K

kcinay055679

Gast
Ich habe folgendes Problem
Wenn ich meinen Code ausführen möchte bekomme ich den folgenden Error
Der ||-Operator kann nicht auf Operanden vom Typ "int" und "int" angewendet werden

Der Code
C#:
int CircleRot = Random.Range(1, 360);
        if (CircleRot = 90 || CircleRot = 180 || CircleRot = 270 CircleRot =|| 360)
        {
            CircleRot += 10;
        }
    }

Was muss ich machen damit der Error verschwindet?
 
Müsste das nicht so aussehen?
C#:
int CircleRot = Random.Range(1, 360);
if (CircleRot == 90 || CircleRot == 180 || CircleRot == 270 || CircleRot == 360)
{
    CircleRot += 10;
}
Ein Gleichheitszeichen ist ne Zuweisung, zwei davon ein Vergleich. Also:
CircleRot = 90 setzt die variable auf 90 und
CircleRot == 90 prüft, ob die Variable 90 entspricht.
 
Zuletzt bearbeitet von einem Moderator:
  • Gefällt mir
Reaktionen: KillerCow, Testa2014 und Scholle1309
Ne Version zum Tüfteln, als Anregung, dich etwas mehr mit der Programmierung zu beschäftigen ;)
(hab gerade kein C# zur Hand zwecks Syntax, aber müsste passen):
C#:
int CircleRot = Random.Range(1, 360);
CircleRot += CircleRot % 90 == 0 ? 10 : 0;

Nachtrag und kleine Klarstellung:
Da der TE eher nicht sehr erfahren ist, will ich hier korrekter Weise darauf hinweisen, dass der Codestil meines Beispiels nicht zwingend "richtiger" und/oder "besser" im Vergleich zu seinem Konstrukt ist!
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: l0lsh4rp, Testa2014 und till69
int CircleRot = Random.Range(1, 360);
CircleRot += CircleRot % 90 == 0 ? 10 : 0;

Das ist schlechter code, wenn auch semantisch identisch zur Version des Fragestellers.

Was soll hier erreicht werden? Der vorliegende Code erzeugt eine ungleich verteilte Zufallszahl im Intervall von 1 bis 370 mit einer Lücke im Bereich von 360 bis 369 und weiteren Lücken bei 90, 180, 270.

Ist das wirklich die Absicht?

Der Fehler liegt (auch) woanders und nicht nur in der Syntax.
 
cool and silent schrieb:
Das ist schlechter code, wenn auch semantisch identisch zur Version des Fragestellers.
Warum?
Ich finde ihn sogar besser, da er explizit sagt: "wenn durch 90 teilbar", statt einfach nur alle Fälle aufzuzählen...

Wobei man womöglich argumentieren kann, lieber ein if-Statement zu nehmen... Nuancen.
 
Ich kann mir vorstellen das er damit folgendes meint:
Eine Addition, ternäre Operation und Modulo sind in einer Zeile und deshalb schlecht lesbar und Fehleranfällig. Das es einen gewissen Bereich gibt der nicht auftreten sollte (nehme ich jetzt mal an) würde ich ausklammern.

hängt auch immer vom Entwickler ab. Klar ist die Lösung für ein geschultes Auge verständlich. Ich glaube jedoch das die Mehrheit den Debugger anwirft oder das ganze auseinander zieht 😉 Dann ist es wieder schlechter Code. Wenn es danach geht können wir auch gleich den Variabelnamen in Frage stellen ... eine natürliche Zahl die einen roten Kreis darstellt. Glaube es soll eher einen Winkel darstellen.

ich denke wir gehen schon weit über die Lösung hinaus.
 
Zuletzt bearbeitet:
Wie schon geschrieben. Was soll hier erreicht werden? Ich erkenne hier nur soviel: Es soll ein zufälliger Winkel gefunden werden und rechte Winkel sind unerwünscht.

Warum nicht

Code:
int CircleRot = 0;
while ( true )
{
    CircleRot = Random.Range(1, 360);
    if ( CircleRot % 90 != 0 )
        break;
}

Hat einen theoretischen Nachteil (undefiniertes Zeitverhalten) aber die Zufallszahl ist gleichverteilt und die mutmaßliche Absicht ist verständlich, ohne eine neue Frage aufzuwerfen, warum +10° ein besonderer Offset ist. Eine Magic number weniger, Klarer Flow, leicht lesbar.
 
  • Gefällt mir
Reaktionen: Testa2014
cool and silent schrieb:
Das ist schlechter code, wenn auch semantisch identisch zur Version des Fragestellers.
Wie ich geschrieben habe, ist das Beispiel als Anreiz gedacht, sich mehr in die Programmierung einzuarbeiten. Das es fernab von leserlich ist und nicht auf Anhieb erkennbar ist, was erreicht werden soll, ist mir mehr als klar. Hätte ich ggf. in dem Kontext erwähnen sollen, ok.

Schön wäre es allerdings gewesen, hättest du kurz erwähnt, warum das mutmaßlich schlechter Code ist. Für einen Perl oder Python Jünger ist das sicherlich "schlechter Code", weil es noch zu viel Code ist ;) Am anderen Ende der Möglichkeiten ist es "schlechter Code", weil er nicht selbstdokumentierend ist.
 
  • Gefällt mir
Reaktionen: new Account()
Hallo zusammen da hier gefühlt alle Einsteins der Neuzeit ihre Zeit in der Quarantäne in diesem Forum verbring stelle ich hier die nächste Frage statt ein neuer Thread zu eröffnen!

Also bei meinem Code (Lerne momentan Unity).
C#:
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.Threading;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;

public class Circle : MonoBehaviour
{
        public        int   speed   = 15;
        public static int   PkLeft  = 0;
        public static int   PkRight = 0;
        public static int   posZ    = 1;
        
    // Start is called before the first frame update
    void Start()
    {
        var pos = transform.position;
        pos.x = 0;
        pos.y = 0;
        pos.z = posZ;
        transform.position = pos;
      
        transform.localScale = new Vector3(5, 5, 1);
        speed = 10;
        UnityEngine.Debug.Log("Die Akktuelle Geschwindikeit ist " + speed);
       
int CircleRot = 0;
        while ( true )
        {
            CircleRot = Random.Range(1, 360);
            if ( CircleRot % 90 != 0 )
                break;
        }
       UnityEngine.Debug.Log("Die Rotation des Balles wurde auf " + CircleRot + " gesetzt");*/
        transform.rotation = Quaternion.Euler(0, 0, 0);
        gameObject.transform.eulerAngles = new Vector3(
        gameObject.transform.eulerAngles.y + 0,
        gameObject.transform.eulerAngles.x + 0,
        gameObject.transform.eulerAngles.z + 0);

    }
    public void OnTriggerEnter( Collider other )
    {
        if (other.gameObject.name == "CubeLeft")
        {
            
            gameObject.transform.eulerAngles = new Vector3(
            gameObject.transform.eulerAngles.x + 0,
            gameObject.transform.eulerAngles.y + 180,
            gameObject.transform.eulerAngles.z + 0);
            if (speed <= 50)
            {
                speed += 2;
            }
            
            UnityEngine.Debug.Log("Die Akktuelle Geschwindikeit ist "+speed);
        }
        if (other.gameObject.name == "CubeRight")
        {
            
            gameObject.transform.eulerAngles = new Vector3(
            gameObject.transform.eulerAngles.x + 0,
            gameObject.transform.eulerAngles.y + 180,
            gameObject.transform.eulerAngles.z + 0);
            if (speed <= 50)
            {
                speed += 2;
            }
            
            
          
            UnityEngine.Debug.Log("Die Akktuelle Geschwindikeit ist " + speed);
        }
        if (other.gameObject.name == "FloorPannel")
        {
          
            gameObject.transform.eulerAngles = new Vector3(
            gameObject.transform.eulerAngles.x + 180,
            gameObject.transform.eulerAngles.y + 0,
            gameObject.transform.eulerAngles.z + 0);
        }
        if (other.gameObject.name == "TopPannel")
        {
          
            gameObject.transform.eulerAngles = new Vector3(
            gameObject.transform.eulerAngles.x + 180,
            gameObject.transform.eulerAngles.y + 0,
            gameObject.transform.eulerAngles.z + 0);
        }
        if(other.gameObject.name == "LeftDetector")
        {
            PkRight += 1;
            
            Start();
        }

        if (other.gameObject.name == "RightDetector")
        {
            PkLeft += 1;
            
            
            Start();
        }
    }
    void Update()
    {
        transform.Translate(speed * Time.deltaTime, speed * Time.deltaTime, 0);
    }
}



Jetzt ist meine Frage wie Rotiere ich meinen Kreis dass er nie in der gleiche Richtung startet.
Und als zweite Frage wie bringe ich ihn 1 nach Vorne denn wenn man, wie ich momentan mit x + speed und y + speed macht bewegt er sich ja schon in eine Richtung kann ich das irgendwie Richtungs unabhängig machen. Ich hoffe ihr versteht meine Fragen wenigstens ein bisschen.

Und noch Vielen Dank für die ganzen Antworten auf die vorherige Frage die eigentlich nur von einem übermüdeten Vollidioten wie mir kommen kann.

LG
Kcinay
 
Zurück
Oben