Gå til innhold

Hva er galt i karakter programmet mitt?


Anbefalte innlegg

Her har jeg hermet litt etter koden til en på forumet for å lage et slags karakter program..

Problemet er at det funker bare for karakter 6, som er lik 100.

Hjelp meg! :D

 

import javax.swing.JOptionPane;

public class karakter
{

public static void main(String[] args)
{

int karakter = 0;
int score;


{
String scoreVerdiString = JOptionPane.showInputDialog("Her har jeg laget et prøveprogram som tar utgangspunkt i at du har hatt en prøve hvor 100 er maks score. Skriv inn din prøvescore:");
int scoreVerdi = Integer.parseInt(scoreVerdiString);

score = (scoreVerdi);

if (score == 100)
{
  karakter = 6;
}

else if (score < 80)
  karakter = 5;
  
else if (score < 60)
  karakter = 4;
  
else if (score < 40)
karakter = 3;

else if (score < 20)
karakter = 2;

else if (score < 20)
karakter = 1;
}

JOptionPane.showMessageDialog(null, "Karakteren din er "+ karakter + "");
System.exit(0);
}
}

 

 

EDIT:

Klarte det :)

Må lære meg å prøve mer før jeg skriker om hjelp.

Så løsningen ble altså å bruke >= istedet for =.

Men en annen ting jeg lurer på er:

 

Jeg vil gjøre så programmet kan sette + og - til karakterene.

Hvordan kan jeg få den til å begrense hvor høyt > går? :)

Okey det her er vanskelig å forklare.. Jeg vil at variablen bare skal gjelde fra 20-25 score sånn at 20-25 score er 1+.

Skjønner du hva jeg mener?

 

EDIT: men ser nå at da oppstår jo enda et problem, for jeg kan jo ikke sette karakter = 4+;

 

int kan jo bare takle et rent tall, hva for en variabel må jeg bruke for 4+?

 

Og en siste ting som jeg kommer på i farten(Jeg liker å samle mye i en post :p )

Hva må til for å gjøre dette programmet om til en applet, eller en annen form for fil så jeg kan vise det til venner f.eks?

Endret av Met_Fredrik
Lenke til kommentar
Videoannonse
Annonse

Kan gjøres slik:

 

import javax.swing.JOptionPane;

public class karakter
{

public static void main(String[] args)
{

String karakter = "0";
int score;


{
String scoreVerdiString = JOptionPane.showInputDialog("Her har jeg laget et prøveprogram som tar utgangspunkt i at du har hatt en prøve hvor 100 er maks score. Skriv inn din prøvescore:");
int scoreVerdi = Integer.parseInt(scoreVerdiString);

score = (scoreVerdi);

if((score > 20) && (25 > score))
 karakter = "1+";

JOptionPane.showMessageDialog(null, "Karakteren din er "+ karakter + "");
System.exit(0);
}
}

 

-Sett karakter til å være String

-if "interval" kan skrives som if((verdi > fra_verdi) && (til_verdi > verdi));

Lenke til kommentar

Takk for hjelpen, men som vanlig har jeg enda flere spørsmål.. :)

 

Hva måtte jeg brukt hvis jeg skulle hatt tekst input på InputDialog?

String scoreVerdiString = JOptionPane.showInputDialog("Her har jeg laget et prøveprogram som tar utgangspunkt i at du har hatt en prøve hvor 100 er maks score. Skriv inn din prøvescore:");
int scoreVerdi = Integer.parseInt(scoreVerdiString);

 

Her lagrer den jo infoen fra inputen i en integer, som bare kan inneholde et tall.

Hvordan skrive så den lagrer i en string?

Lenke til kommentar
Denne vil jeg teste!

 

Gi meg en link som jeg kan teste

5204201[/snapback]

 

 

Hva mener du med denne vil du teste?

Altså du vil ha scriptet?

 

import javax.swing.JOptionPane;

public class karakter
{

public static void main(String[] args)
{


int score;
String karakter = "0";


{
String scoreVerdiString = JOptionPane.showInputDialog("Her har jeg laget et prøveprogram som tar utgangspunkt i at du har hatt en prøve hvor 100 er maks score. Skriv inn din prøvescore:");
int scoreVerdi = Integer.parseInt(scoreVerdiString);

score = (scoreVerdi);

if ((score == 100))
{
karakter = "6";
}
else if ((score > 76) && (score < 81))
 karakter = "5+";

else if ((score > 71) && (score < 76))
 karakter = "5";

else if ((score > 66) && (score < 71))
 karakter = "5-";

else if ((score > 61) && (score < 66))
 karakter = "4+";

else if ((score > 56) && (score < 61))
 karakter = "4";

else if ((score > 51) && (score < 56))
 karakter = "4-";

else if ((score > 46) && (score < 51))
 karakter = "3+";

else if ((score > 41) && (score < 46))
 karakter = "3";

else if ((score > 36) && (score < 41))
 karakter = "3-";
  
else if ((score > 31) && (score < 36))
 karakter = "2+";
  
else if ((score > 26 ) && (score < 31))
 karakter = "2";

else if ((score > 20) && (score < 26))
 karakter = "2-";

else if (score < 20)
 karakter = "1";
}

JOptionPane.showMessageDialog(null, "Karakteren din er "+ karakter + "");
System.exit(0);
}
}

 

Eller mente du noe annet? :)

 

Og jeg etterlyser fortsatt hjelp på forrige spm. mitt, #3.

:)

Endret av Met_Fredrik
Lenke til kommentar

Du trenger ikke å teste både om den er høyere og lavere enn den forige verdien, for hadde den ikke vært lavere enn den forige hadde den forige testen blitt true.

 

import javax.swing.JOptionPane;

public class Karakter{
   public static void main(String[] args){
   	try{
     int score = Integer.parseInt( JOptionPane.showInputDialog("tast inn et tall?") );
       	String utBeskjed = "Din karakter er : ";

        if (score > 100)
            utBeskjed = "Du skrev for høy verdi";

        else if (score < 0)
            utBeskjed = "Du skrev for lav verdi";

        else if (score > 80)
            utBeskjed += "6";

        else if (score > 76)
            utBeskjed += "5+";

        else if (score > 71)
            utBeskjed += "5";

        else if (score > 66)
            utBeskjed += "5-";

        else if (score > 61)
            utBeskjed += "4+";

        else if (score > 56)
            utBeskjed += "4";

        else if (score > 51)
            utBeskjed += "4-";

        else if (score > 46)
            utBeskjed += "3+";

        else if (score > 41)
            utBeskjed += "3";

        else if (score > 36)
            utBeskjed += "3-";

        else if (score > 31)
            utBeskjed += "2+";

        else if (score > 26)
            utBeskjed += "2";

        else if (score > 20)
            utBeskjed += "2-";

        else if (score >= 0)
            utBeskjed += "1";

        JOptionPane.showMessageDialog( null, utBeskjed );
        System.exit(0);
   	}
   	catch (NumberFormatException n){
     JOptionPane.showMessageDialog( null, "Du skrev ikke inn et gyldig tall" );
     System.exit(1);
   	}
   }
}

 

EDIT:

For å kunne vise den til noen kan du f.eks gi de Karakter.class filen som de kan kjøre fra commandline ved å skrive "java Karakter". For å gjøre dette lettere kan du legge ved en .bat fil som kjører denne.

 

Bare skriv dette i notepad og lagre som "RunMe.bat" , det viktige her er at du skriver navnet når du lagrer filen med " " hermetegn for da blir filtypen .bat og ikke .txt

 

java Karakter

 

Så legger du de to filene (RunMe.bat og Karakter.class) i samme mappe og gir til den du vil, men .bat filen vil bare virke dersom den ligger i samme mappe som .class filen.

 

Applet er IMO overkill til dette programmet, men det du må gjøre er:

 

import javax.swing.*; //sørger for at både JOptionPane og JApplet er importert

import java.awt.*; //Importerer både Color og Graphics

public class Karakter extends JApplet{ //extende JApplet

public void init() //Ha en init metode hvor utregningene blir gjort

public void paint( Graphics g) { //Ha en paint metode hvor du skriver ut stringene dine

 

Når du så skal "tegne" på Graphics objektet gjør du på denne måten inni paint metoden:

 

super.paint( g );

g.drawString("Karakter", 40, 490); //horisontalt og vertikalt startpunkt i pixler

 

Så lager du en html fil hvor med koden:

<applet code="Karakter.class" height="500" width="500"></applet>

Hvor du selvsagt selv velger størrelse

Endret av JohndoeMAKT
Lenke til kommentar

Hva med en score mellom 81 og 100. Den vil ikke gi noen verdi slik jeg ser det.

 

Ørjan...

 

import javax.swing.JOptionPane;

public class karakter
{

public static void main(String[] args)
{


int score;
String karakter = "0";


{
String scoreVerdiString = JOptionPane.showInputDialog("Her har jeg laget et prøveprogram som tar utgangspunkt i at du har hatt en prøve hvor 100 er maks score. Skriv inn din prøvescore:");
int scoreVerdi = Integer.parseInt(scoreVerdiString);

score = (scoreVerdi);

if ((score == 100))
{
karakter = "6";
}
else if ((score > 76) && (score < 81))
 karakter = "5+";

else if ((score > 71) && (score < 76))
 karakter = "5";

else if ((score > 66) && (score < 71))
 karakter = "5-";

else if ((score > 61) && (score < 66))
 karakter = "4+";

else if ((score > 56) && (score < 61))
 karakter = "4";

else if ((score > 51) && (score < 56))
 karakter = "4-";

else if ((score > 46) && (score < 51))
 karakter = "3+";

else if ((score > 41) && (score < 46))
 karakter = "3";

else if ((score > 36) && (score < 41))
 karakter = "3-";
  
else if ((score > 31) && (score < 36))
 karakter = "2+";
  
else if ((score > 26 ) && (score < 31))
 karakter = "2";

else if ((score > 20) && (score < 26))
 karakter = "2-";

else if (score < 20)
 karakter = "1";
}

JOptionPane.showMessageDialog(null, "Karakteren din er "+ karakter + "");
System.exit(0);
}
}

 

Eller mente du noe annet? :)

 

Og jeg etterlyser fortsatt hjelp på forrige spm. mitt, #3.

:)

5204250[/snapback]

Lenke til kommentar
EDIT:

For å kunne vise den til noen kan du f.eks gi de Karakter.class filen som de kan kjøre fra commandline ved å skrive "java Karakter". For å gjøre dette lettere kan du legge ved en .bat fil som kjører denne.

 

Bare skriv dette i notepad og lagre som "RunMe.bat" , det viktige her er at du skriver navnet når du lagrer filen med " " hermetegn for da blir filtypen .bat og ikke .txt

 

java Karakter

 

Så legger du de to filene (RunMe.bat og Karakter.class) i samme mappe og gir til den du vil, men .bat filen vil bare virke dersom den ligger i samme mappe som .class filen.

 

5204353[/snapback]

 

Dette blir vel litt feil så vidt jeg ser det.. For man må da ha innstallert java jdk for å kunne kjøre class filer fra kommando?

Finnes det ingen måte å compile .class til .exe?

Eller må dette gjøres gjennom et annet språk etc?

EDIT:

@Ørjan:

Dette er fikset, du har helt rett i at en verdi over 81 IKKE gir reultat.

Endret av Met_Fredrik
Lenke til kommentar

Jeg tror ikke du må ha installert Java JDK, men hvilken som helst JVM. J2SE er vel den vanligeste og bør kunne kjøre class filer direkte. Jeg regner også med at de fleste har en JVM installert på maskinen sin. (?)

Hvis ikke så er det også mulig å lagre som .exe, men det er så vidt jeg vet forskjellige metoder å gjøre dette for hvilken IDE du bruker. (eclipse, jbuider, osv)

 

Men jeg kom akkurat på at du også kan lagre som .JAR.

I Jbuider åpner du først prosjektet, så velger du file, new, archive, Application, next, next, next, next, use the clas specified blow, velg Karakter og trykk Finish.

 

Så høyreklikker du på "Application" under project source og velger "make".

Endret av JohndoeMAKT
Lenke til kommentar
Jeg tror ikke du må ha installert Java JDK, men hvilken som helst JVM. J2SE er vel den vanligeste og bør kunne kjøre class filer direkte. Jeg regner også med at de fleste har en JVM installert på maskinen sin. (?)

Hvis ikke så er det også mulig å lagre som .exe, men det er så vidt jeg vet forskjellige metoder å gjøre dette for hvilken IDE du bruker. (eclipse, jbuider, osv)

 

Men jeg kom akkurat på at du også kan lagre som .JAR.

I Jbuider åpner du først prosjektet, så velger du file, new, archive, Application, next, next, next, next, use the clas specified blow, velg Karakter og trykk Finish.

 

Så høyreklikker du på "Application" under project source og velger "make".

5206797[/snapback]

 

Weeee.. lagret nettop karakter programmet mitt som en .exe fil som kan kjøres av alle :)

I morgen skal jeg hente 3 nye bøker på biblioteket så ska vi se om vi ikke kommer enda litt videre i morra :thumbup:

 

Takk for hjelp så langt :)

Lenke til kommentar

Et par ting:

 

1. Begynn med laveste verdi. Da slipper du 'intervall' testingen. som i

if score > 0 => karakter = 1

if score > 20 => karakter = 2 osv.

2. ang dit 'spm 3', du får data tilbake som string fra inputdialogen. Det er når du skriver int score = (castedscore) at du konverterer fra string til int, og dette er akkurat det samme som å bruke string.parseint() .

Lenke til kommentar

hehe.. denne minner meg om et enkel oppgave jeg hadde på skolen. Men da med A-F karakterskalaen og ved hjelp av en fil som heter MyInput.java

dette var kun en liten oppgave som gjaldt eksamenskarakterer eller no. Eksamenskarakterer har ikke + og -

 

public class oppgave43{
 public static void main(String[] args){
   int poeng;
   String karlinje="FFFFFFFEEEEDDCCBBAAA";
   System.out.println("Skriv inn poengsum: ");
   poeng=MyInput.readInt();
   if( (poeng<100) && (poeng>0)){
     System.out.println("Poengsummen tilsvarer karakter "+karlinje.charAt(poeng/5));
   } else {
     System.out.println("Prøv igjen din kødd!");
   }
 }
}

 

enklere får man det ikke :thumbup:

Endret av Breiker
Lenke til kommentar
Et par ting:

 

1. Begynn med laveste verdi. Da slipper du 'intervall' testingen. som i

if score > 0 => karakter = 1
if score > 20 => karakter = 2 osv.

 

Det er ikke nødvendig å starte på laveste verdi for å slippe intervalltesting.

if score > 80 => karakter = 6
if score > 60 => karakter = 5
osv.

Lenke til kommentar

Det er ikke nødvendig å starte på laveste verdi for å slippe intervalltesting.

if score > 80 => karakter = 6
if score > 60 => karakter = 5
osv.

5208800[/snapback]

 

Neivel. La oss si at score = 86. Først testes denne mot større enn 80, og karakteren blir 6. Så testes denne mot større enn 60 (og det er jo også sant) og karakteren blir 5. Og så videre.

 

Tenk, Trykk, Tal.

Lenke til kommentar
Det er ikke nødvendig å starte på laveste verdi for å slippe intervalltesting.

if score > 80 => karakter = 6
if score > 60 => karakter = 5
osv.

5208800[/snapback]

Neivel. La oss si at score = 86. Først testes denne mot større enn 80, og karakteren blir 6. Så testes denne mot større enn 60 (og det er jo også sant) og karakteren blir 5. Og så videre.

 

Tenk, Trykk, Tal.

5210606[/snapback]

Men det er jo ikke verre enn å legge til else foran if, så forsvinner problemet...

 

if score > 80 => karakter = 6
else if score > 60 => karakter = 5
osv.

 

Tenk, trykk, skriv, submit :p

Lenke til kommentar

Jaja, avslutter like gjerne denne tråden, jeg starter heller en ny.

Her er en ferdig versjon av "programmet".

Har laget en liten error funksjon og.

Kom gjerne med synspunkter, er fortsatt på et utrolig lavt nivå så trenger all hjelp jeg kan få :D

Men er det greit nok til å ha brukt java i 4 dager?

(Bare for å fremkalle noen gode kommentarer som man pleier å gjøre rundt 4 års alder.)

 

import javax.swing.JOptionPane;
import javax.swing.*;

public class karakter
{

public static void main(String[] args)
{

int score;
String karakter = "0";      
 {
 String scoreVerdiString = JOptionPane.showInputDialog("Her har jeg laget et prøveprogram som tar utgangspunkt i at du har hatt en prøve hvor 100 er maks score. Skriv inn din prøvescore:");
 int scoreVerdi = Integer.parseInt(scoreVerdiString);

 
 	if ((scoreVerdi > 100) || (scoreVerdi < 1))
 	{
   JOptionPane.showMessageDialog(null, "Skriv inn et gyldig tall neste gang.");
   return;
 	}
 	

 score = (scoreVerdi);
                
 if ((score == 100))
 	{
 	karakter = "6";
 	}

 else if ((score > 90) && (score <= 100))
 	karakter = "6-";

 else if ((score > 76) && (score <= 90))
 	karakter = "5+";

 else if ((score > 71) && (score <= 76))
 	karakter = "5";

 else if ((score > 66) && (score <= 71))
 	karakter = "5-";

 else if ((score > 61) && (score <= 66))
 	karakter = "4+";

 else if ((score > 56) && (score <= 61))
 	karakter = "4";

 else if ((score > 51) && (score <= 56))
 	karakter = "4-";

 else if ((score > 46) && (score <= 51))
 	karakter = "3+";

 else if ((score > 41) && (score <= 46))
 	karakter = "3";

 else if ((score > 36) && (score <= 41))
 	karakter = "3-";
  
 else if ((score > 31) && (score <= 36))
 	karakter = "2+";
  
 else if ((score > 26 ) && (score <= 31))
 	karakter = "2";

 else if ((score > 20) && (score <= 26))
 	karakter = "2-";

 else if ((score > 15) && (score <= 20))
 	karakter = "1+";

 else if (score < 15)
 	karakter = "1";
 }

 JOptionPane.showMessageDialog(null, "Karakteren din er "+ karakter + "");
 
}
}

Lenke til kommentar

Det er ikke nødvendig å starte på laveste verdi for å slippe intervalltesting.

if score > 80 => karakter = 6
if score > 60 => karakter = 5
osv.

5208800[/snapback]

 

Neivel. La oss si at score = 86. Først testes denne mot større enn 80, og karakteren blir 6. Så testes denne mot større enn 60 (og det er jo også sant) og karakteren blir 5. Og så videre.

 

Tenk, Trykk, Tal.

5210606[/snapback]

 

Set skulle selvsagt være en else if setning. Liten forglemmelse fra min side. Altså.

if score > 80 => karakter = 6
else if score > 60 => karakter = 5
osv.

 

Ørjan...

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...