2013-05-22 3 views
23

Je voudrais m'excuser d'avance pour mon incroyable nouveauté en ce qui concerne Java et la programmation en général. Mais j'ai cherché partout une réponse à cela et je n'arrive pas à en trouver une.Je n'arrive pas à comprendre pourquoi DrJava ne sortira pas de symboles Unicode

Je suis simplement essayer de lancer ce qui suit:

public class WriteSquares2 
{ 
    public static void main(String[] args) 
    { 
    for (int i=1; i<=10; i++) 
    { 
     System.out.println(i + " \u2261 " + (i % 7) + " modulo 7"); 
    } 
    } 
} 

Le caractère Unicode \ u2261 est le signe de la congruence (≡). DrJava montre ce qui suit en sortie:

1 ? 1 modulo 7 
2 ? 2 modulo 7 
3 ? 3 modulo 7 
4 ? 4 modulo 7 
5 ? 5 modulo 7 
6 ? 6 modulo 7 
7 ? 0 modulo 7 
8 ? 1 modulo 7 
9 ? 2 modulo 7 
10 ? 3 modulo 7 

Ce qui est plus étrange à ce sujet est que lorsque je tape simplement

'\u2261' 

dans la zone Interactions, je reçois le caractère d'équivalence entre guillemets simples:

'≡' 

J'ai essayé simplement de mettre '\ u2261' dans le code au lieu de "\ u2261", mais ensuite j'ai des trucs comme ceci:

8803 modulo 7 
8805 modulo 7 
8807 modulo 7 

J'ai également essayé simplement d'insérer le caractère Unicode dans le code, mais cela a juste donné un message d'erreur. Quelqu'un peut-il comprendre ce qui se passe ou ce que je fais mal? Votre aide est tres apprecie.

[Je devrais ajouter que ce n'est pas un devoir ou quoi que ce soit, car notre livre mentionne à peine Unicode - essayant juste de comprendre ceci ... et quand j'ai commencé, je ne pensais pas que ce serait dur!]

EDIT: J'utilise Mac OS 10.7.5 et Dr Java dit que sa construction est "drjava-20120818-r5686".

EDIT # 2: Voici une capture d'écran utilisant Monospaced 12 comme police principale. Il apparaît toujours comme des points d'interrogation, même si je peux obtenir la console pour me renvoyer le symbole si je le tape directement, mais avec des guillemets simples.

enter image description here

+0

Il fonctionne pour moi sans problème quand je suis arrivé éclipse. Ne pas avoir de drjava .... – Thihara

+2

Ca ** ne fonctionne pas pour moi quand j'ai vérifié eclipse. Aussi, ne pas avoir de drjava; vous n'êtes pas seul: S – Craig

+3

Peut-être que la police utilisée sur votre système n'a pas de glyphe pour ce caractère? –

Répondre

0

Avez-vous changé votre invite à la sortie en unicode. (Note Java par défaut dans le monde anglophone est IS0-8859-1).

+0

Je ne suis pas sûr de ce que vous voulez dire. Par invite, voulez-vous dire dans la fenêtre de la console Dr Java? J'ai regardé dans tous les menus et n'ai trouvé aucune mention d'Unicode. Cela semble être une chose si simple ... –

8

Le problème a à voir avec la police que vous utilisez, ce n'est pas un problème avec votre code. Voir les paramètres de DrJava sous Edit > Preferences > Display Options > Fonts > Main Font.

DrJava en utilisant la police par défaut (monospaced 12) sur Linux: DrJava on Linux with "Main Font" set to default (Monospaced 12)

DrJava en utilisant une police différente (PT Sans 12) sur Linux: DrJava on Linux with "Main Font" set to "PT Sans 12"

Les deux captures d'écran sont de la même instance de DrJava; Je n'ai même pas dû le fermer. Notez que dans le volet Interactions, le glyphe est correct pour ma police Monospaced et est un espace réservé générique pour PT Sans. La même chose se produit dans l'onglet Console (non illustré).

+1

La police monospace spécifique est DejaVu Sans Mono. –

+0

Merci pour la réponse. C'était logique pour moi et je pensais que ça marcherait, mais malheureusement, quand j'ai changé la police en Monospaced 12, j'ai encore des points d'interrogation à la place des symboles de congruence. Maintenant, je ne sais pas vraiment ce qui se passe ... –

+0

(J'ai ajouté une capture d'écran à mon message original.) –

2

J'ai fait une recherche de peu, et j'ai trouvé une solution qui a été trouvée avant d'une autre question here

Donc dans ce cas, il pourrait être quelque chose de similaire. Pas vraiment votre code, mais la façon dont DrJava gère unicode en fonction de votre système.

" Le codage des caractères dépend du système. Selon votre boîte, il peut imprimer les 16 bits du codage UTF-16 (qui est 9794), les 8 bits hauts (qui seraient 38) ou, comme dans votre cas, les bas 8 bits (ce qui est 66).

9794/256 = 38 
9794 % 256 = 66 

"

Questions connexes