PhorpherMedlem sedan feb. 20002 300 inlägg Du deklarerar dem inte. Du försöker tilldela dem en typ som inte stämmer överens med den typ de själva är.
forstaTalet och andraTalet är utav typen int.
tal1 och tal2 är utav typen String.
forstaTalet = Integer.parseInt(tal1);
andraTalet = Integer.parseInt(tal2);
Detsamma gäller för operatorn.
Du har deklarerat operatorn att vara av typen char och sen försöker du tilldela operatorn värdet som tecken innehåller. Men tecken är en String.
Här har du lite tips för typkonvertering:
http://www.rgagnon.com/javadetails/java-0004.html
PeWMedlem sedan juni 200010 432 inlägg Sen har du 's' som inparameter fast du använder den inte, inget 'error' men onödigt. Förresten så bör du undvika globaler och istället lägga in tal1, tal2 och tecken som inparametrar istället.
jmeMedlem sedan maj 20012 237 inlägg Viktor löste problemet, men jag tänkte vidareutveckla svaret lite. :)
Jag ser att du har deklarerat vissa metoder som statiska, med nyckelordet static. Vad static gör i metod-sammanhang är att metoder som är deklarerade som statiska går att anropa utan att först ha instansierat ett klass-objekt.
Tänk själv: Hur kan du öppna ett fönster i ett hus som inte har byggts. Samma sak gäller instans-variablar av en viss klass.
Hur kan du anropa en variabel som tillhör klass Olle om du först inte har instansierat ett objekt av klassen Olle?
Men ibland vill man skapa metoder som inte har en koppling med klassobjekten. Detta har man nytta av då man skapar s k stöd-klasser som senare ska användas av flera andra klasser. Klasser som enbart innehåller färdiga metoder som andra klasser lätt kan använda. Java innehåller en massa såna klasser. Kika på java.lang.Math. Den innehåller en massa statiska metoder för att beräkna cos, sin, tan, medeltal osv.
Det är ju lättare att köra:
double tal = Math.sin(2.0);
än att behöva göra såhär:
Math math = new Math();
double tal = math.sin(2.0);
public class Test
{
int tal = 2;
static int tal2 = 3;
public Test()
{
}
public void metod()
{
// denna metod kan även komma åt tal2;
System.out.println(tal);
}
public static void metod2()
{
// denna metod kan inte använda variabeln tal eftersom den kanske inte har skapats när denna metod anropas
System.out.println(tal2);
}
public static void main(String[] args)
{
Test test = new Test();
// exempel 1) anropa metoden metod()
test.metod();
// exempel 2) anropa metoden metod2()
// kan göras på två sätt
Test.metod2();
// eller
test.metod2();
// Sen kan du även skriva ut innehållet på variabeln tal2 genom:
System.out.println(Test.tal2);
// detta går dock inte:
//System.out.println(tal);
}
}
TACK SÅ JÄTTE MYCKE!
Skall börja kolla era tips om utvecklingen av koden så snart jag fått den jäveln att funka ordentligt först.
Bara en liten sak nu, har testat
char operatorn = char.parseChar(tecken);
Projekt.java:50: class expected
char operatorn = char.parseChar(tecken);
^
Projekt.java:50: incompatible types
found : java.lang.Class
required: char
char operatorn = char.parseChar(tecken);
char operatorn = char.valueOf(tecken).charValue();
Projekt.java:50: class expected
char operatorn = char.valueOf(tecken).charValue();
^
Projekt.java:50: incompatible types
found : java.lang.Class
required: char
char operatorn = char.valueOf(tecken).charValue();
^
2 errors
Vad är det nu jag lyckas missa?
ViktorMedlem sedan aug. 20021 752 inlägg char är en primitiv datatyp, som int, double, float osv. Det är inte en klass som t.ex. String. Det har därför inte några funktioner eller attribut utan är bara som det är. Du får använda klassen Char om du vill komma åt de funktioner som du vill komma åt.
I Java börjar alla klasser med stor bokstav, alla variabler och funktioner börjar med liten bokstav, därför kan man genast se att char inte är en klass och att String är en klass.
/Viktor
tack för dina svar!
Men, gaaaaaaaaaaaah...(joo dessvärre känner jag så just nu...är helt tom i huvut tydligen just nu, så förstår ej det som förmodligen sedan kommer visa sig vara grymt logiskt...)
char operatorn = Char.parseChar(tecken);
Projekt.java:50: cannot resolve symbol
symbol : variable Char
location: class Projekt
char operatorn = Char.parseChar(tecken);
^
1 error
Trodde jag hade missat stor bokstav på "char" i början på koden, men nej.
du får använda klassen Char om du vill komma åt de funktioner som du vill komma åt.
förlåt för att jag tydligen är massor med seg idag...?
Jag måste väll fortfarande deklarera "operatorn" till en char va?
och sedan när jag deklarerar "operatorn"´s värde dvs Char.parseChar(tecken); så är det där jag missat bokstaven.
Detta vad hur jag tänkte, men ack så fel det blev trots allt...
ViktorMedlem sedan aug. 20021 752 inlägg Sorry, klassen heter Character. Men det finns ingen "parseChar" i den klassen, så var du har hittat den vet jag inte. Här kan du läsa mer om klassen Character
/Viktor
ViktorMedlem sedan aug. 20021 752 inlägg Om du vill göra om teckan från en sträng till en char så kan du skriva såhär
char operatorn =tecken.charAt(0);
Då får du första bokstaven i tecken.
/Viktor
Du skall veta hur tacksam jag är för att du tar dig tid att svara,
TACK!
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
public class Projekt extends JFrame
{
private JTextField forsta;
private JTextField andra;
private JTextField operator;
private String tal1;
private String tal2;
private String tecken;
private int summan;
public Projekt()
{
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Välkommen
JOptionPane.showMessageDialog(null,
"Välkommen till min miniräknare");
// första talet
tal1 = JOptionPane.showInputDialog(null,
"Skriv in det första talet:");
forsta = new JTextField(tal1, 20);
// Andra talet
tal2 = JOptionPane.showInputDialog(null,
"Skriv in det andra talet:");
andra = new JTextField(tal2, 20);
// tecknet
tecken = JOptionPane.showInputDialog(null,
"Skriv in vilken operator ni vill använda\n + - * /");
operator = new JTextField(tecken, 20);
// Summan
JOptionPane.showMessageDialog(null,
tal1 + " " + tecken + " " + tal2 + " = " + summan);
}
public double parseDouble(String s)
{
int forstaTalet = Integer.parseInt(tal1);
int andraTalet = Integer.parseInt(tal2);
char operatorn = tecken.charAt(0);
if (operatorn == '+')
summan = forstaTalet+andraTalet;
else if (operatorn == '-')
summan = forstaTalet-andraTalet;
else if (operatorn == '*')
summan = forstaTalet*andraTalet;
else if (operatorn == '/')
summan = forstaTalet/andraTalet;
}
public static void main(String[] arguments)
{
Projekt frame = new Projekt();
}
}
Projekt.java:45: missing return statement
{
^
1 error
Nu är ej tårarna långt borta alltså... x(
Har setat och slagit i boken "Lär dig Java2 3:e upplagan på 3 veckor " nu fram och tillbaka, samtidigt som jag försökt granska andra projekt koder. Men lyckas alltså ej lösa detta...
Samtidigt som jag just gått igenom sidan du skickade, angående
"parseChar" så fick jag den från
http://www.rgagnon.com/javadetails/java-0004.html
Där jag trodde det skulle gå att lösa char på det sättet, men alltså ej.
att nu { på rad 45 saknar nått förstår jag ej, för att på rad 60 stängs den igen...har provat om det nu skulle vara så att koden ville ha en { efter deklarationen. Men inte de funkade heller, får samma svar
[kod]
public double parseDouble(String s)
{
int forstaTalet = Integer.parseInt(tal1);
int andraTalet = Integer.parseInt(tal2);
char operatorn = tecken.charAt(0);
{
if (operatorn == '+')
summan = forstaTalet+andraTalet;
else if (operatorn == '-')
summan = forstaTalet-andraTalet;
else if (operatorn == '*')
summan = forstaTalet*andraTalet;
else if (operatorn == '/')
summan = forstaTalet/andraTalet;
}
}
ViktorMedlem sedan aug. 20021 752 inlägg
Projekt.java:45: missing return statement
{
Rad 44-45 serut såhär
public double parseDouble(String s)
{
Här har du deklarerat att du vill ha en publik funktion, som ska retunera en double och som ska heta parseDouble. Men du retunerar aldrig en double, det är det som felmedelandet "missing return statment" säger. I sutet av funktionen måste du retunera en double, nu kan jag inte se att du har någon double deklarerad så antingen gör du om summa till en double och skriver in "return(summa);" på slutet eller så tar du och byter ut double mot void,
public void parseDouble(String s)
{
Jag skrev om din kod lite så att den mer liknar så som jag skulle skriva den, hoppas du inte tar illa upp :)
OBS! Den är ej testad.
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
public class Projekt extends JFrame
{
private JTextField forsta;
private JTextField andra;
private JTextField operator;
public Projekt()
{
//de lokala variabler som behövs i denna funktion
String tal1;
String tal2;
String tecken;
int summan;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Välkommen
JOptionPane.showMessageDialog(null, "Välkommen till min miniräknare");
// första talet
tal1 = JOptionPane.showInputDialog(null, "Skriv in det första talet:");
forsta = new JTextField(tal1, 20);
// Andra talet
tal2 = JOptionPane.showInputDialog(null, "Skriv in det andra talet:");
andra = new JTextField(tal2, 20);
// tecknet
tecken = JOptionPane.showInputDialog(null, "Skriv in vilken operator ni vill använda\n + - * /");
operator = new JTextField(tecken, 20);
summa=berakna(Integer.parseInt(tal1),Integer.parseInt(tal2),tecken.charAt(0));
// Summan
JOptionPane.showMessageDialog(null, tal1 + " " + tecken + " " + tal2 + " = " + summa);
}
public int berakna(int tal1, int tal2, char operator)
{
if (operator == '+')
return(tal1+tal2);
else if (operator == '-')
return(tal1-tal2);
else if (operator == '*')
return(tal1*tal2);
else if (operator == '/')
return(tal1/tal2);
}
public static void main(String[] arguments)
{
Projekt frame = new Projekt();
}
}
En ska som jag kom att tänka på var vad gör du med alla JTextFields? Används de på annat ställa i koden eller?
/Viktor
TACK!
Nej jag har inget emot det överhuvudtaget att du bygger om den lite, vill bara få denna att funka nu så jag kan korrigera den lite sedan och kanske lägga till ett par saker.
Testade just din kod men fick detta svaret
Projekt.java:36: cannot resolve symbol
symbol : variable summa
location: class Projekt
summa=berakna(Integer.parseInt(tal1),Integer.parseInt(tal2),teck
en.charAt(0));
^
Projekt.java:39: cannot resolve symbol
symbol : variable summa
location: class Projekt
JOptionPane.showMessageDialog(null, tal1 + " " + tecken + " " +
tal2 + " = " + summa);
^
2 errors
PeWMedlem sedan juni 200010 432 inlägg Du har ingen variabel deklarerad med namn 'summa'. Däremot har du deklarerat en int vid namn 'summan'. Bara att korrigera mao ;)
NEJ DETTA ÄR EJ SANT ALLTSÅ....
import java.awt.GridLayout;
import java.awt.event.*;
import javax.swing.*;
public class Projekt extends JFrame
{
private JTextField forsta;
private JTextField andra;
private JTextField operator;
public Projekt()
{
//de lokala variabler som behövs i denna funktion
String tal1;
String tal2;
String tecken;
int summa;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Välkommen
JOptionPane.showMessageDialog(null, "Välkommen till min miniräknare");
// första talet
tal1 = JOptionPane.showInputDialog(null, "Skriv in det första talet:");
forsta = new JTextField(tal1, 20);
// Andra talet
tal2 = JOptionPane.showInputDialog(null, "Skriv in det andra talet:");
andra = new JTextField(tal2, 20);
// tecknet
tecken = JOptionPane.showInputDialog(null, "Skriv in vilken operator ni vill använda\n + - * /");
operator = new JTextField(tecken, 20);
summa=berakna(Integer.parseInt(tal1),Integer.parseInt(tal2),tecken.charAt(0));
// Summan
JOptionPane.showMessageDialog(null, tal1 + " " + tecken + " " + tal2 + " = " + summa);
}
public int berakna(int tal1, int tal2, char operator)
{
if (operator == '+')
return(tal1+tal2);
else if (operator == '-')
return(tal1-tal2);
else if (operator == '*')
return(tal1*tal2);
else if (operator == '/')
return(tal1/tal2);
return(0);
}
public static void main(String[] arguments)
{
Projekt frame = new Projekt();
}
}
Exception in thread "main" java.lang.NoClassDefFoundError: projekt (wrong name:
Projekt)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:509)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
3)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:246)
at java.net.URLClassLoader.access$100(URLClassLoader.java:54)
at java.net.URLClassLoader$1.run(URLClassLoader.java:193)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
utan return(0);
projekt.java:43: missing return statement
{
^
1 error
Jag känner mig som detdär puckot i sällskapsresan som ej får motorjäveln att starta till sin båt, och står och drar och drar i dendär jälva tråden (som tur är så har jag ingen fogel som skrattar åt mig i var fall...hehe)
spangoMedlem sedan juni 20008 205 inlägg
jenicpunktnu skrev:
Exception in thread "main" java.lang.NoClassDefFoundError: projekt (wrong name: Projekt)
Skulle gissa att din fil heter "projekt.java" i stället för "Projekt.java".
PeWMedlem sedan juni 200010 432 inlägg Nu har du fått ett antal olika felmeddelanden som vi hjälpt till med att lösa. Slutsats? ;)
Nu har du fått ett antal olika felmeddelanden som vi hjälpt till med att lösa. Slutsats?
Studera ej på distans, bättre att göra det i ett klassrum.
Framförallt för att då fungerar "räcka upp handen" - systemet för info bra mycke snabbare och framför allt smidigare.
MEN TACK SÅ JÄTTE MYCKE FÖR ALL HJÄLP
jag är verkligen tacksam!
(skall ja vara ärlig så är koden ej klar ännu, har fått ytterliggare felmeddelande)
PeWMedlem sedan juni 200010 432 inlägg Jag bara menade det att dessa felmeddelanden faktiskt säger vad som är fel och t.o.m på vilken rad felet är. Inget fel att fråga om råd, tvärtom... men ibland är det lite väl uppenbart vad som är felet.
Kan bli lite lustigt om man postar felmessen utan att titta på vad som faktiskt står ;)
Håller med dig
När jag ser det klara projektet så kommer det nog defenetivt vara skrattretande enkelt. Eftersom koden i själva verket ej är specielt avancerad. Bara jag som förmodligen suttit för länge med detta och då fastnat "andra" tankebanor kring detta (som gör mig blind för det uppenbara...) fråga mig ej hur jag har lyckats, men har ej löst det ännu.
Exception in thread "main" java.lang.NoClassDefFoundError: projekt (wrong name: Projekt)
hmm, har testat döpa om filnamet, både till stor och liten bokstav i filnamnet, men intet.
Kollade igenom texten om det fanns någon felstavning eller stor/liten bokstav som var fel där. Men inte de heller
Testade tom att lägga in Projekt i main, men inte det heller.
GAA vad är det som jag gör fel?
Vad är det som är så förbannat enkelt igentligen men som jag tydligen missar...
PeWMedlem sedan juni 200010 432 inlägg Någonstans är det uppenbarligen olika namn. Projekt vs projekt. Du får helt enkelt se till att det står exakt likadant överallt. :)
ÄNTLIGEN!!
Nu funkar den!!
(hade koden liggandes i en mapp som även den hette Projekt, lade den i annan mapp och då funkade de direkt!)
TACK FÖR ALL HJÄLP!