webForumDet fria alternativet

if x < apa + 1..?

.NET

5 svar · 1 495 visningar · startad av PollyJuice

Medlem sedan mars 2006124 inlägg
Frågan#1

Arbetar på ett program till en labb i C# - meningen är att det ska bli ett textbaserat spel där man ska kasta bananer på en apa för att slippa bli uppäten av densamma.

När jag skapade samma spel i en annan kurs, i java (samme lärare, därav samma uppgift...) så funkade spelet utmärkt. Men i C# - icke! Såhär ser koden ut. Jag ha rmarkerat den rad som ställer till med problem för mig. Hur ska man skriva istället för det som jag gjort???

using System;
using System.Collections.Generic;
using System.Text;

namespace Laboration1
{
class Program
{
public static void Main(string[] args)
{
Random randObj = new Random();

        Console.WriteLine("Hej och välkommen till Apspelet!");
        Console.WriteLine("Spelet går ut på att du ska kasta bananer åt en apa. Om apan lyckas fånga åtminstone 5 bananer, blir den nöjd och glad, och kramar om dig. Om du kastar bananerna alldeles åt skogen, blir apan sur och hungrig och äter upp dig istället!");
        
        int kast = 10;
        double apa = 100.00; //apan börjar med att stå på 100 meters avstånd;
        double points = 0.0;
        double x; //x = avstånd från utgångspunkt där kastet landar \[m\].

        for (int nuvarande = 0; nuvarande \< kast; nuvarande++)
        {
            Console.WriteLine("Hur hårt kastar du? Ange svaret i hela antal meter per sekund (dvs ett heltal).");

            double v; //v = utgångshastighet i kastet \[m/s\]

            string inmatning = Console.ReadLine();
            double siffra = Convert.ToDouble(inmatning);
            v = siffra;

            Console.WriteLine("Vilken vinkel har du på kastet? Ange i antal grader (dvs ett heltal). Tänk på att 0 grader betyder att du rullar bananen längs med marken, och att 90 grader innebär att du kastar bananen rakt upp i luften så att den landar i skallen på dig själv.");

            double a; //a = kastvinkel. \[i radianer\] 0-längs marken, pi/2 rakt upp.

            string mataIn = Console.ReadLine();
            double siffra2 = Convert.ToDouble(mataIn);
            a = siffra2;

            // Genom att multiplicera antalet grader med pi/180 får man fram antalet radianer.
            a = a \* Math.PI / 180;

            //Tänk på att \<0 = medvind, \>0 = motvind, samt att 5 meter/sekund anses vara en stark vind. Överdriv inte!!!

            double w; //w = vindhastighet. (\<0 med-, \>0 motvind \[m/s\])

            w = randObj.NextDouble() \* 10.0 - 5.0;

            Double g; //g = gravitationskonstant. 9.81\[m/s2\]
            g = 9.81;

           x = 2 \* v \* v \* Math.Cos(a) \* Math.Sin(a) / g - w \* v \* Math.Sin(a) / g; // räknar ut resultatet.
 
            if (x \< apa + 1 \|\| x \> apa - 1)

            { points++; }

            else
            { points = points + 0; }
            apa = apa - 10;

       **if (x \< apa +1 \|\| x \> apa-1)**
                    {
                        Console.WriteLine("Du har kastat" + x + "meter. Träff!");
                    }
                    else
                    {
                        Console.WriteLine("Du har kastat" + x + "meter. Miss!");
                    }
                        }

        if (points \>= 5.0)
            {
            Console.WriteLine("Apan har ätit sig mätt och belåten, och är så glad att den kramar om dig!");
            }
        else
            {
            Console.WriteLine("Apan har inte fått i sig tillräckligt många bananer, utan är sur och hungrig. Den kastar sig över dig och börjar gnaga på dina öron.");
            }
    }
}

}

Medlem sedan juni 20008 205 inlägg
#2

Kompilerade och rullade fint (= utan exceptions) hos mig. Hur är det som det "inte funkar", blir villkoret inte sant när det borde bli det? Gör du alla uträkningar rätt? Gör lite debugutskrifter på vägen och kolla om det ser vettigt ut.

Förresten, kod-taggen är mycket bättre än quote-taggen :p

Medlem sedan mars 2006124 inlägg
#3

Felet är att man får träff HELA tiden, dvs den använder sig inte av villkoret. Det går inte att få "miss" även om man kastar bananen bakom sig!

Medlem sedan aug. 20039 340 inlägg
#4

Dun använder fel logik. Du ska ha && istället för ||. Demonstration av logiken:

x < apa +1 || x > apa-1
         V apa+1
...======]
    ...eller...
       [=====...
       ^ apa-1

x < apa +1 && x > apa-1
         V apa+1
     ...=]
    ...och...
       [=...
       ^ apa-1

Det övre fallet är alltsp alltid sant, eftersom varje tal uppfyller det eller andra villkoret.

Medlem sedan mars 2006124 inlägg
#5

Tack! :D

Medlem sedan jan. 20023 327 inlägg
#6

Tråd flyttad från C/C++.

264 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)