Inlägg

Inlägg som noyce har skrivit i forumet
Av noyce

Ta även en titt på hur många varv din loop kör, just nu ser du ut att köra 1 varv för mycket.

Av noyce

@Svettig finnepinne:

Jag ser att du fixat några problem som jag hintade om, t.ex. att programmet inte hanterade om man skrev in värdet 438900 eller 638500, samt att du fixade till dina beräkningar, bra!

Problemet som du har nu tror jag enbart beror på en liten förvirring eftersom du får utskrivet resultatet 0.0 och att du få fokuserar på fel delar av din kod. Nu spekulerar jag, men av din kod att bedöma ser det ut som att du tänkt dig följande:
1. Fråga om årsinkomst.
2. Om den är under eller exakt 438900 avsluta programmet.
3. Om den är mellan 438900 och 638500 beräkna MidTaxes
3.1 Fråga om fler avdrag för MidTaxes.
3.2 Skriv ut statlig skatt grundat på MidTaxes och avsluta programmet.
4. Om den är över 638500 beräkna HighTaxes
4.1 Fråga om fler avdrag för HighTaxes
4.2 Skriv ut statlig skatt grundat på HighTaxes och avsluta programmet.

Detta mönster fungerar absolut, men precis som @perost så verkar det som att du glömt bort lite måsvingar ({}) för att kapsla in steg 3.1 och steg 3.2 i steg 3, vilket kommer leda till att steg 3.1 och steg 3.2 alltid körs (om årsinkomsten är över 438900). Det finns flera designval som går att peka på och förbättra i din kod, men jag tycker att det är bra att man får märka av problemet som kan uppstå genom att faktiska göra felen.

När man skriver if-satser så är det fullt giltigt att skriva utan måsvingar ({}) när det bara är 1 rad som ska köras efteråt, precis som du gjort här:

if (fortsatt == 1) mera = +0; // annan note: här behöver du inte skriva +0, räcker med 0 (det betyder ju samma sak). Kan bli förvirrande, som jag nämnde i mitt förra inlägg.

Däremot om det är flera saker som ska köras om if-satsen är giltig så måste man använda måsvingar, för annars körs bara första raden. Detta verkar du redan ha greppat, men problemet som uppstår är att när man inte använder måsvingar hela tiden, så kommer man att glömma bort dem ibland. Man tänker alltså kanske rätt, men allt blir fel för att man glömt bort att kapsla in sin kod i rätt if-sats. Därför är det god praxis (det är rekommenderat) att alltid använda måsvingar efter sina if-satser, oavsett om det är 1 rad kod som ska köras i den. Då blir både mer enhetlig kod och tydligare att se vad som ska köras i if-satsen, framförallt då koden brukar bli indenterad (indragen) innanför måsvingarna. Exemplet ovan blir alltså:

if (fortsatt == 1) { mera = +0; }

Sen vill jag också slå ett till slag för att titta på hur man debuggar sin kod, jag länkade till ett youtube-klipp i mitt föregående inlägg som visar hur man gör detta i IntelliJ, du kanske använder en annan IDE? Eclipse eller IntelliJ är väl de två stora, så om du inte använder någon av dem skulle jag föreslå att byta till någon av dem, sedan titta på någon guide eller youtube hur man debuggar sin kod.

Av noyce

@Svettig finnepinne:

Viktigt att tänka på är att ditt program exekveras (körs) uppifrån och ner, därför skulle vi kunna dela in ditt program i olika delar.

Del 1: Först deklarerar och initierar du ett antal variabler som du tänkt att använda genom programmets gång. De flesta variablerna får värdet 0. Att tänka på: Används alla variabler?

String TotSalary; int YearSalary; double Below=0.0; double over=0.0; double screwed=0.0; double Over=0.0; double MidTaxes=0.0; double HighTaxes=0; String MoreDraw; double Relief=0.0; int mera=0;

Del 2: I denna del frågar du efter årsinkomsten hos personen, och beroende på vad de svarar ska olika saker utföras. Så om du nu t.ex. tittar på raden där du räknar ut MidTaxes, vad har Relief för värde? Vad förväntar du dig att det ska ha i detta läge? Även att tänka på: vad händer om du skriver in årsinkomsten 438900 eller 638500, vad säger dina if-satser?

TotSalary=JOptionPane.showInputDialog(null, "Årsinkomst?"); YearSalary=Integer.parseInt(TotSalary); if(YearSalary<438900) { JOptionPane.showMessageDialog(null, "Du betalar ingen statligskatt");//<438900 ingen statlig skatt System.exit(0); } else if(YearSalary>438900&&YearSalary<638500) MidTaxes=Relief-13100-(0.2*YearSalary);//årsinkomst mellan 438900 och 638500,lägg till 20% statlig skatt else if(YearSalary>638500) HighTaxes=Relief-13100-(YearSalary*0.25);//årsinkomst över 638500, lägg till 5% statlig skatt utöver 20% else { JOptionPane.showMessageDialog(null, "Beräkningen avbryten"); System.exit(0); }

Del 3: I detta steg kör du en do-while loop, så länge variabeln mera är större än 0. Såg att jag i mitt föregående inlägg hade skrivit en kommentar som inte riktigt stämde, du skriver mera = +1, i mitt förra inlägg läste jag detta som "mera += 1", vilket är stor skillnad. "mera += 1" är samma sak som att skriva "mera = mera + 1", medan "mera = +1" är samma sak som att skriva "mera = 1". Men hur som helst, i detta avsnitt tilldelar du variablerna "MoreDraw" och "Relief" värden om man vill lägga till fler avdrag. Hint: Hur används dessa i sista delen av programmet?

do { int fortsatt=JOptionPane.showConfirmDialog(null, "Vill du mata in fler skatteavdrag?Grundavdraget har redan blivit avdragen.", "Fråga", JOptionPane.YES_NO_OPTION); if(fortsatt==0) { mera = +1; MoreDraw=JOptionPane.showInputDialog(null, "Mata in avdraget"); Relief=Relief+Double.parseDouble(MoreDraw); } else if(fortsatt==1) mera = +0; else { JOptionPane.showMessageDialog(null, "Beräkningen avbryten"); System.exit(0); } } while (mera>0);

Del 4: Det sista du gör är att skriva ut den statliga skatten. Viktigt att tänka på här är att " Statlig skatt: " + MidTaxes + HighTaxes är en sträng, så det sker inga beräkningar här (MidTaxes + HighTaxes är ingen beräkning) då allt görs om till strängar som slås ihop. Ett exempel: Om MidTaxes har värdet 5 och HighTaxes har värdet 2, så kommer strängen "Statlig skatt: 52" att skrivas ut och inte "Statlig skatt: 7". Vill du göra en beräkning måste du alltså göra det innan du skriver ut det i din dialog.

JOptionPane.showMessageDialog(null," Statlig skatt: " + MidTaxes + HighTaxes);

Det kan vara bra att dela upp sitt program såhär i olika delar för att försöka förstå vad som händer. Ett annat sätt för att hitta fel i ditt program är ett debugga sin kod, det betyder att du kan sätta en brytpunkt på en viss rad i din kod, och när du sedan kör ditt program i "debug-mode" så stannar programmet där du satt brytpunkten och du kan se vad alla variabler har för värde i just det läget av koden. I din kod skulle du alltså kunna sätta en brytpunkt där du gör dina beräkningar som blir fel, för att se vad alla varibler har för värde som utgör beräkningen, t.ex Relief och YearSalary.

Detta blev långt, tanken är inte att lösa ditt problem, utan att försöka få dig att se hur du kan hitta det själv. Inom programmering är felsökning en viktig del, att kunna felsöka sin kod för att förstå vart det blir fel. "När denna beräkning utförs, vad förväntar jag mig att alla variabler ska ha för värde då och vad är deras faktiska värde".

Av noyce

@Svettig finnepinne:

För att enklare läsa din kod bör du omge den med code-taggar:
[code]
Din kod här.
[/code]

Att en variabel inte är initierad betyder att du inte har tilldelat den något "värde". Det du har gjort är att endast deklarera variablarna, vilket säger att en variabel ska vara av en viss typ, t.ex. en "String".

// Detta är endast en deklarerad variabel String name;

// Denna variabel är initierad. String name = "Kalle Svensson";

Tog även ett titt på din kod, gav några enklare kommentarer på saker du kan fundera på.

int antalMan=0; double totalManAges; double maleAverageAge; double totalWomanAges; double womanAverageAge; int antalKvinna=0; int mera=0; int aldrarMan=0; int aldrarKvinna=0; String manAges; String womanAges; do { int start= JOptionPane.showConfirmDialog(null, "Man?", "Fråga", JOptionPane.YES_NO_OPTION); if(start==0) { antalMan=antalMan+1; manAges=JOptionPane.showInputDialog(null, "Ålder på mannen?"); if(false) // Här säger du: "om falsk är sant, bryt loopen.", vilket alltså aldrig kan inträffa. break; else { totalManAges=aldrarMan+Double.parseDouble(manAges); maleAverageAge=totalManAges / antalMan; } } else if(start==1) { antalKvinna=antalKvinna+1; womanAges=JOptionPane.showInputDialog(null, "Ålder på kvinnan?"); if(false) // Här säger du: "om falsk är sant, bryt loopen.", vilket alltså aldrig kan inträffa. break; else { totalWomanAges = aldrarKvinna+Double.parseDouble(womanAges); womanAverageAge = totalWomanAges / antalKvinna; } } else { JOptionPane.showMessageDialog(null, "Beräkningen avbryten"); System.exit(0); } int fortsatt = JOptionPane.showConfirmDialog(null, "Vill du mata in mer uppgifter?", "Fråga", JOptionPane.YES_NO_OPTION); if(fortsatt==0) mera=+1; else if(fortsatt==1) mera=+0; // Här säger du att mera ska plussas på med 0... 5 + 0 är fortfarnade 5. else { JOptionPane.showMessageDialog(null, "Beräkningen avbryten"); System.exit(0); } } while (mera>0); JOptionPane.showMessageDialog(null, "Antalet män: " + antalMan + " Männens medelålder: " + maleAverageAge + "\nAntalet kvinnor: " + antalKvinna + " Kvinnornas medelålder: " + womanAverageAge); }

Av noyce

Sitter på en Triwa - Mist Klinga. Byter mellan armbandet som följer med och ett mesh - riktigt smidigt.

Av noyce

Högskoleingenjör inom data.
Ingångslön på 31 500, avtalad höjning vid fast anställning.
Stockholm

Av noyce

Instagram har tyvärr en del restriktioner på deras API, men om du endast ska visa bilder från ditt egna konto går det att fixa. Du behöver registrera din sida och få en s.k "access token" som du sedan använder i dina API-calls.

Allt står egentligen här: instagram api

Av noyce

Jag är lite kluven till vad jag personligen tycker är bäst för en IO-panel (dock borde det självfallet inte vara USB 2.0. eller mick/hörlurar). Jag har då aldrig använt mer än 1 usb port fram på samma gång, å andra sidan har jag heller aldrig använt min usb type-c port på laptopen heller. Om man ska ha någonting över huvud taget tror jag att en type-c och en type-a är the way to go då type-c känns som framtiden och att man med stor sannolikhet inte kommer byta ut IO-panelen själv. Sen om det blir 2 st Type-A är ingenting som avgör om det blir köp eller inte.

Av noyce

Jag älskar detta! Precis ett sådant här chassi jag vill ha, riktigt bra att ni verkar ha tagit bort all text och logotyper på fronten, hade varit ett stort minus på en i övrigt clean design. Skulle för övrigt vara kul att se lite bilder med chassit bredvid andra populära chassin för att se storleksskillnaderna.

Missade förra kickstartern, som tur är får jag en chans på nästa, woho!

Av noyce

Är ni studenter så kan ni ha hur många privata repositories hos GitHub som ni vill, dessutom får man en hel del annat.

Av noyce

Jag antar att de inte infört detta endast för att jävlas? Så att prata med föräldrarna och argumentera för sin sak är mitt förslag.

Edit: Json_81 var visst snabbare på pucken.

Av noyce
Skrivet av BjK:

Man hade ju lätt kunnat upptäcka om varan stämde överrens om man börjat med att titta på etiketten på burken utan att ens starta datorn. (Förutsätter att det finns en då det är en färdig burk med modellnr)

Svårt detta

Men den logiken borde då även säljaren ha vetat exakt vilken dator det var han sålde från första början. Tycker det då blir ganska likt detta fall och således borde köparen kunna häva köpet enl 39§.

Av noyce

Det kanske kan vara värt att kolla upp diverse systemvetarprogram. Jag är inte helt hundra vad som ingår exakt, men tror inte du behöver någon högre matte eller liknande för att bli antagen där (alltså bör det vara minimalt med matte i programmet).

Av noyce

@guermantes:

Ja exakt, vet dock inte exakt version. Men något verkar vara allvarligt fel, för nu går mer och mer sönder för varje dag som går.

Av noyce
Skrivet av Repair:

Gör inte det då du kommer att bryta din garanti. Kontakta oneplus först. Om dom inte vill hjälpa till, då kan du lägga in ett rom.

Tack för heads-up. Ska ta och göra det innan, utan några förhoppningar.

Av noyce
Skrivet av lanbonden:

@noyce: Har hon haft problemet länge eller är det nytt?
Undrar då både jag och tjejen fick märkliga problem med våra O+3 efter uppdateringen till OxygenOS 4.0.2

Som sagt började det visa sig för lite drygt två månader sen, lite då och då. Nu är problemet i princip permanent.

Av noyce

@ojz0r: Tack för tipset, ska testa detta till helgen!

Av noyce

Oneplus 3 - Processen system svarar inte

Hej,

Det är så att min flickvän att råkat ut för lite problem med mobilen som vi inte riktigt får bukt på.
Så fort hon ska svara på ett samtal, eller ringer ett så hänger sig mobilen och hon får "Processen system svarar inte". Vilket gör att hon inte kan ringa. Detta började visa sig lite smått för två månader sedan, men då hörde man henne bara inte i telefonen och tänkte bara att det var någon liten bugg som hände ibland, så då la man bara på och ringde upp igen. Nu händer detta hela tiden.

Lite andra fel sker också, mobilen känner inte av hörlurarna samt att den hänger sig ibland och fastnar i en loop som endast visar loading screen.

Hon har gjort factory reset och rensat data & cache. Vi har även uppdaterat firmware med adb sideload och senaste versionen av OxygenOS. Supporten på oneplus var inte mycket till hjälp.

Hittar inte mycket på google heller (endast att man ska rensa data och cache).

Mobil: Oneplus 3, köpt sommaren 2016
Andriod 7.0
OxygenOS 4.0.2

Något som haft liknande problem och hittat någon lösning, eller vet något mer jag kan testa?

// noyce

Av noyce

@Tunnelsork: Där lärde jag mig något nytt, tackar! Hade lite på känn att det nog inte var problemet, hade å andra sidan inte varit första gången i världshistorien ett missat tecken ställde till det

Av noyce

Borde det inte bara ett par fnuttar här:

'Content-Type: text/HTML; charset=iso-8859-1', -------- 'Content-Type: text/HTML; charset="iso-8859-1"',

Kan vara ute och cykla också

Edit: Det som Tunnelsork skrev lät mer vettigt!
Edit2: Jag var ute och cykla, se nedan...