/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Kan ikke kompile min kode
Fra : JS


Dato : 24-11-04 13:50

1 class DecimalToBinary{
2 public static void main(String[] y){
3 int dec = new Integer(y[0]).intValue();
4 if (dec/32 = 0)
5 System.out.println(0 + (dec % 32) / 16);
6 else System.out.println(1);


}}

Når jeg forsøget at kompilere denne kode får jeg følgende fejl på linie 4:

Error: unexpected type
required: variable
found : value


Hvad gøre jeg galt?
--
Mvh
Johs



 
 
Michael Rasmussen (24-11-2004)
Kommentar
Fra : Michael Rasmussen


Dato : 24-11-04 14:01

On Wed, 24 Nov 2004 13:49:40 +0100, JS wrote:

> Når jeg forsøget at kompilere denne kode får jeg følgende fejl på
> linie 4:
>
> Error: unexpected type
> required: variable
> found : value
>
if (dec/32 = 0) skal vist være if (dec/32 == 0)
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917


Mikael Flensborg (24-11-2004)
Kommentar
Fra : Mikael Flensborg


Dato : 24-11-04 14:21

Hvorfor ikke bare if (dec == 0) ?

/Mikael


"Michael Rasmussen" <mir@miras.org> skrev i en meddelelse
news:pan.2004.11.24.13.00.48.254278@miras.org...
> On Wed, 24 Nov 2004 13:49:40 +0100, JS wrote:
>
> > Når jeg forsøget at kompilere denne kode får jeg følgende fejl på
> > linie 4:
> >
> > Error: unexpected type
> > required: variable
> > found : value
> >
> if (dec/32 = 0) skal vist være if (dec/32 == 0)
> --
> Hilsen/Regards
> Michael Rasmussen
> http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
>



kgc (24-11-2004)
Kommentar
Fra : kgc


Dato : 24-11-04 15:09

Mikael Flensborg wrote:
> Hvorfor ikke bare if (dec == 0) ?
Tja, nu kan jeg ikke helt se hvad meningen med koden er, men dit forslag
betyder i hvert fald noget andet, idet / betyder heltalsdivision når de
indgående typer er heltal, så f.eks. vil 10/32 == 0 (idet "32 går nul
hele gange op i 10").

Jeg undrer mig nu over meningen med den oprindelige kode:
> 1 class DecimalToBinary{
> 2 public static void main(String[] y){
> 3 int dec = new Integer(y[0]).intValue();
> 4 if (dec/32 = 0)
> 5 System.out.println(0 + (dec % 32) / 16);
> 6 else System.out.println(1);
>
>
> }}

Man skulle tro at "dec/32 == 0" er ensbetydende med "dec < 32" hvilket
igen betyder at "dec % 32 == dec". Så kunne linie 5 ikke lige så vel være:
   System.out.println(dec / 16);
Bemærk at jeg undlader at lægge 0 til, da dette ikke har nogen effekt,
men måske er der ment:
   System.out.println("0" + dec / 16);
Altså sammensætning af strenge. Har jeg misforstået eller overset noget?

Mvh. Kasper

--
Besøg mig på nettet: http://www.kaspershjemmeside.dk

JS (24-11-2004)
Kommentar
Fra : JS


Dato : 24-11-04 15:35


"kgc" <news1@kaspershjemmeside.dk> skrev i en meddelelse
news:41a495f1$0$8769$edfadb0f@dread15.news.tele.dk...
> Mikael Flensborg wrote:
> > Hvorfor ikke bare if (dec == 0) ?
> Tja, nu kan jeg ikke helt se hvad meningen med koden er, men dit forslag
> betyder i hvert fald noget andet, idet / betyder heltalsdivision når de
> indgående typer er heltal, så f.eks. vil 10/32 == 0 (idet "32 går nul
> hele gange op i 10").
>
> Jeg undrer mig nu over meningen med den oprindelige kode:
> > 1 class DecimalToBinary{
> > 2 public static void main(String[] y){
> > 3 int dec = new Integer(y[0]).intValue();
> > 4 if (dec/32 = 0)
> > 5 System.out.println(0 + (dec % 32) / 16);
> > 6 else System.out.println(1);
> >
> >
> > }}
>
> Man skulle tro at "dec/32 == 0" er ensbetydende med "dec < 32" hvilket
> igen betyder at "dec % 32 == dec". Så kunne linie 5 ikke lige så vel være:
> System.out.println(dec / 16);
> Bemærk at jeg undlader at lægge 0 til, da dette ikke har nogen effekt,
> men måske er der ment:
> System.out.println("0" + dec / 16);
> Altså sammensætning af strenge. Har jeg misforstået eller overset noget?


Indtil videre ser koden sådan her ud:

class DecimalToBinary{
public static void main(String[] y){
int dec = new Integer(y[0]).intValue();

if (dec > 63)
System.out.print("Number too Large");
else
if (dec/32 == 0)
System.out.print("0" + (dec % 32) / 16);
else System.out.print(1);

if (((dec % 32) / 16) == 0)
System.out.print((dec % 32) / 16);
else System.out.print(1);

if (((dec % 16) / 8) == 0)
System.out.print((dec % 16) / 8);
else System.out.print(1);

if (((dec % 8) / 4) == 0)
System.out.print((dec % 8) / 4);
else System.out.print(1);

if (((dec % 4) / 2) == 0)
System.out.print((dec % 4) / 2);
else System.out.print(1);

System.out.print(dec % 2);

}}


Men hvis jeg skriver et tal større end 63 (fx 64) så skriver den som
resultat:

Number too Large00000

Men resultatet burde vel bare være Number too Large...




Martin Husted Hartvi~ (24-11-2004)
Kommentar
Fra : Martin Husted Hartvi~


Dato : 24-11-04 16:19

On Wed, 24 Nov 2004 15:34:53 +0100, JS <dsa.@asdf.com> wrote:

Prøv at checke start og slut på dine if sætninger, det vil hjælpe.





>
> "kgc" <news1@kaspershjemmeside.dk> skrev i en meddelelse
> news:41a495f1$0$8769$edfadb0f@dread15.news.tele.dk...
>> Mikael Flensborg wrote:
>> > Hvorfor ikke bare if (dec == 0) ?
>> Tja, nu kan jeg ikke helt se hvad meningen med koden er, men dit forslag
>> betyder i hvert fald noget andet, idet / betyder heltalsdivision når de
>> indgående typer er heltal, så f.eks. vil 10/32 == 0 (idet "32 går nul
>> hele gange op i 10").
>>
>> Jeg undrer mig nu over meningen med den oprindelige kode:
>> > 1 class DecimalToBinary{
>> > 2 public static void main(String[] y){
>> > 3 int dec = new Integer(y[0]).intValue();
>> > 4 if (dec/32 = 0)
>> > 5 System.out.println(0 + (dec % 32) / 16);
>> > 6 else System.out.println(1);
>> >
>> >
>> > }}
>>
>> Man skulle tro at "dec/32 == 0" er ensbetydende med "dec < 32" hvilket
>> igen betyder at "dec % 32 == dec". Så kunne linie 5 ikke lige så vel
>> være:
>> System.out.println(dec / 16);
>> Bemærk at jeg undlader at lægge 0 til, da dette ikke har nogen effekt,
>> men måske er der ment:
>> System.out.println("0" + dec / 16);
>> Altså sammensætning af strenge. Har jeg misforstået eller overset noget?
>
>
> Indtil videre ser koden sådan her ud:
>
> class DecimalToBinary{
> public static void main(String[] y){
> int dec = new Integer(y[0]).intValue();
>
> if (dec > 63)
> System.out.print("Number too Large");
> else
> if (dec/32 == 0)
> System.out.print("0" + (dec % 32) / 16);
> else System.out.print(1);
>
> if (((dec % 32) / 16) == 0)
> System.out.print((dec % 32) / 16);
> else System.out.print(1);
>
> if (((dec % 16) / 8) == 0)
> System.out.print((dec % 16) / 8);
> else System.out.print(1);
>
> if (((dec % 8) / 4) == 0)
> System.out.print((dec % 8) / 4);
> else System.out.print(1);
>
> if (((dec % 4) / 2) == 0)
> System.out.print((dec % 4) / 2);
> else System.out.print(1);
>
> System.out.print(dec % 2);
>
> }}
>
>
> Men hvis jeg skriver et tal større end 63 (fx 64) så skriver den som
> resultat:
>
> Number too Large00000
>
> Men resultatet burde vel bare være Number too Large...
>
>
>


hal@no_spam_statsbib~ (24-11-2004)
Kommentar
Fra : hal@no_spam_statsbib~


Dato : 24-11-04 16:37

JS wrote:

> class DecimalToBinary{
> public static void main(String[] y){
> int dec = new Integer(y[0]).intValue();
>
> if (dec > 63)
> System.out.print("Number too Large");
> else
> if (dec/32 == 0)
> System.out.print("0" + (dec % 32) / 16);
> else System.out.print(1);
>


herfra og ned udføres alle if - else blokke (også selv om dec > 63).
Du kan overveje om det er værd at lave udregningen 2 gange i hver blok

> if (((dec % 32) / 16) == 0)
> System.out.print((dec % 32) / 16);
> else System.out.print(1);

Hvad med :
if (((dec % 32) / 16) == 0)
System.out.print(0);
else System.out.print(1);

eller

System.out.printline(((dec % 32) / 16) == 0) ? "0" : "1");



> Men hvis jeg skriver et tal større end 63 (fx 64) så skriver den som
> resultat:
>
> Number too Large00000
>
> Men resultatet burde vel bare være Number too Large...
>
>
>

JS (24-11-2004)
Kommentar
Fra : JS


Dato : 24-11-04 16:54

Nu har jeg helt droppet alle de if sætninger....men jeg kan dog stadig ikke
finde udaf hvordan man tager højde for negative tal. Jeg troede at man bare
kunne skrive:

if ((dec > 63) && (dec < 0)){
System.out.print("Number too large or too small");
}else{.....resten af koden.....

men det fungere ikke. Hvordan laver man andalso?


Opdateret koden nedenunder:




class DecimalToBinary{
public static void main(String[] y){
int dec = new Integer(y[0]).intValue();

if ((dec > 63) && (dec < 0)){
System.out.print("Number too large or too small");
}else{

System.out.print(dec + " in binary is ");
System.out.print(dec/32);
System.out.print((dec % 32)/16);
System.out.print((dec % 16)/8);
System.out.print((dec % 8)/4);
System.out.print((dec % 4)/2);
System.out.print(dec % 2);

}

}
}



JS (24-11-2004)
Kommentar
Fra : JS


Dato : 24-11-04 16:58


"JS" <dsa.@asdf.com> skrev i en meddelelse
news:co2anf$pvu$1@news.net.uni-c.dk...
> Nu har jeg helt droppet alle de if sætninger....men jeg kan dog stadig
ikke
> finde udaf hvordan man tager højde for negative tal. Jeg troede at man
bare
> kunne skrive:
>
> if ((dec > 63) && (dec < 0)){
> System.out.print("Number too large or too small");
> }else{.....resten af koden.....
>
> men det fungere ikke. Hvordan laver man andalso?


Shit har vist siddet foran skærmen for længe...et tal kan jo ikke både være
større end 63 og mindre end 0...tid til at strække benene.



kgc (24-11-2004)
Kommentar
Fra : kgc


Dato : 24-11-04 18:06

> Shit har vist siddet foran skærmen for længe...et tal kan jo ikke både være
> større end 63 og mindre end 0...tid til at strække benene.
Tanketorsk laver vi vist alle ind imellem -- jeg laver dem oftere end
jeg vi indrømme . Bare hvis du ikke allerede ved det, så laver du
eller med ||, altså

if(betingelse1 || betingelse2) {
//Udføres hvis betingelse1 eller betingelse2 evaluerer til true
}

Mvh. Kasper

--
Besøg mig på nettet: http://www.kaspershjemmeside.dk

kgc (24-11-2004)
Kommentar
Fra : kgc


Dato : 24-11-04 18:04

> class DecimalToBinary{
> public static void main(String[] y){
> int dec = new Integer(y[0]).intValue();
>
> if ((dec > 63) && (dec < 0)){
> System.out.print("Number too large or too small");
> }else{
>
> System.out.print(dec + " in binary is ");
> System.out.print(dec/32);
> System.out.print((dec % 32)/16);
> System.out.print((dec % 16)/8);
> System.out.print((dec % 8)/4);
> System.out.print((dec % 4)/2);
> System.out.print(dec % 2);
>
> }
>
> }
> }
>
Er sørme blevet pænt og forståeligt siden første post Virker det
efter hensigten nu?

Bare en tanke der lige faldt mig ind:
int max = 5;
int temp = dec;
String bin = "";
for(int i = max; i > 0; i--) {
int p = 2^i;
bin = bin + (temp/p);
temp = temp % p;
}
System.out.println(dec + " in binary is " + bin);

Ikke testet, ikke nødvendigvis bedre, men jeg syntes dog måske alligevel
det har en vis elegance og letlæselighed? Men OK, måske grunden til du i
første omgang ikke skrev hvad koden skulle gøre, var at du selv ville
finde en måde, frem for at få den serveret, og det er da
beundringsværdigt og fornuftigt hvis du er ved at lære.


Mvh. Kasper


--
Besøg mig på nettet: http://www.kaspershjemmeside.dk

JS (24-11-2004)
Kommentar
Fra : JS


Dato : 24-11-04 18:45


> Er sørme blevet pænt og forståeligt siden første post Virker det
> efter hensigten nu?

Jep nu kører den, fik også rettet && til ||....

> Bare en tanke der lige faldt mig ind:
> int max = 5;
> int temp = dec;
> String bin = "";
> for(int i = max; i > 0; i--) {
> int p = 2^i;
> bin = bin + (temp/p);
> temp = temp % p;
> }
> System.out.println(dec + " in binary is " + bin);


Det ser spændende ud, det er vist også på tide jeg finder udaf at bruge
forløkker (så vidt jeg kan se er det sådan en du anvender).
Kan man udelade int max = 5 og så bare skrive i = 5 nede i forløkken?


Mvh
Johs



kgc (26-11-2004)
Kommentar
Fra : kgc


Dato : 26-11-04 08:30

> Det ser spændende ud, det er vist også på tide jeg finder udaf at bruge
> forløkker (så vidt jeg kan se er det sådan en du anvender).
Jep, det er en for-løkke, og det er såmænd ikke så vanskeligt - bare slå
op i en java-bog. Som du sikkert har set, er der kommet andre gode
forslag til løsninger her i tråden, og bemærk at jeg lige havde glemt at
^ ikke opløfter til en potens i Java (det gør det i Clarion, som jeg
koder en del i for tiden). Man kan i stedet bruge f.eks. Math.pow eller
binært shift (da det er 2'er potenser vi taler om.

> Kan man udelade int max = 5 og så bare skrive i = 5 nede i forløkken?
Jep, det kan man godt. Jeg brugte kun en variabel for at vise at man let
kan udvide til at understøtte større tal.

Mvh. Kasper


--
Besøg mig på nettet: http://www.kaspershjemmeside.dk

Rolf E. Thorup (24-11-2004)
Kommentar
Fra : Rolf E. Thorup


Dato : 24-11-04 19:02

kgc wrote:
>> class DecimalToBinary{
>> public static void main(String[] y){
>> int dec = new Integer(y[0]).intValue();
>>
>> if ((dec > 63) && (dec < 0)){
>> System.out.print("Number too large or too small");
>> }else{
>>
>> System.out.print(dec + " in binary is ");
>> System.out.print(dec/32);
>> System.out.print((dec % 32)/16);
>> System.out.print((dec % 16)/8);
>> System.out.print((dec % 8)/4);
>> System.out.print((dec % 4)/2);
>> System.out.print(dec % 2);
>>
>> }
>>
>> }
>> }
>>
> Er sørme blevet pænt og forståeligt siden første post Virker det
> efter hensigten nu?
>
> Bare en tanke der lige faldt mig ind:
> int max = 5;
> int temp = dec;
> String bin = "";
> for(int i = max; i > 0; i--) {
> int p = 2^i;
> bin = bin + (temp/p);
> temp = temp % p;
> }
> System.out.println(dec + " in binary is " + bin);

Ahh nu forstod jeg hvad du mente. Ovenstående gør ikke det du vil for
'^' er xor operatoren og opløfter ikke 2 i tallet 'i'. Prøv med

int p = 1 << i;

istedet.

Rolf

Thorbjoern Ravn Ande~ (24-11-2004)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 24-11-04 19:30

kgc <news1@kaspershjemmeside.dk> writes:

> int p = 2^i;

^ har en anden virkning i Java. Brug "1 << i " i stedet.

--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn

hal@no_spam_statsbib~ (25-11-2004)
Kommentar
Fra : hal@no_spam_statsbib~


Dato : 25-11-04 12:25

kgc wrote:

> Er sørme blevet pænt og forståeligt siden første post Virker det
> efter hensigten nu?
>
> Bare en tanke der lige faldt mig ind:
> int max = 5;
> int temp = dec;
> String bin = "";
> for(int i = max; i > 0; i--) {
> int p = 2^i;
> bin = bin + (temp/p);
> temp = temp % p;
> }
> System.out.println(dec + " in binary is " + bin);
>
> Ikke testet, ikke nødvendigvis bedre, men jeg syntes dog måske alligevel
> det har en vis elegance og letlæselighed? Men OK, måske grunden til du i
> første omgang ikke skrev hvad koden skulle gøre, var at du selv ville
> finde en måde, frem for at få den serveret, og det er da
> beundringsværdigt og fornuftigt hvis du er ved at lære.
>
>
> Mvh. Kasper

Nu var det rigtigt nok ikke metoden der spørges til; men det er da
rigtigt at proplemet kan løses på mange elegante måder:

eksempelvis substraktion af potens:

int max = 5;
int loop = max - 1;
temp = dec;
bin = "";
while (loop >= 0) {
if (temp - ((int) Math.pow(2, loop)) >= 0) {
bin += "1";
temp = temp - (int) Math.pow(2, loop);
} else {
   bin += "0";
}
loop--;
}
System.out.println(dec + " in binary is " + bin);
}

Umiddelbart ulemper; da man ser på højeste betydende ciffer først, skal
vi kende terminerings grundlaget før start.

Lettest må derfor være at kigge på lige/ulige shift startende med
laveste betydende ciffer:

   int dec;
int temp = dec;
String bin = "";
while (temp > 0) {
bin = (temp % 2) + bin;
temp = temp / 2;
}

System.out.println(dec + " equals:" + bin);

mvh
Hans

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste