2017-10-06 54 views
-5
class Test { 

    private double d; 
    private int i; 
    private char c; 

    public Test (float x){ 
     d = x; 
     i = 5; 
     c = 'A'; 
    } 
    public Test (double x){ 
     d = x + x; 
     i = 3; 
     c = 'Z'; 
    } 

    public void set(char x) { 
     c = x; 
    } 

    public void set(int x) { 
     i = x; 
    } 

    public String toString(){ 
     return "d=" + d + " i=" + i + " c ="+c; 
    } 

} 

public class Display{ 
public static void main(String args[]){ 
    Test t1 = new Test(10); 
    System.out.println(t1.toString()); 
    t1.set('m'); 
    System.out.println(t1); 
    Test t2 = new Test(20.25); 
    System.out.println(t2); 
    t2.set('a' + 1); 
    System.out.println(t2); 
} 
} 

我不明白的最后一个命令的输出t2.set('a' + 1); 输出为:如何计算我?这是令人困惑

d=40.5 i=98 c =Z" 

为什么我= 98?

这是我第一次张贴在这里它告诉我,我的问题是,大部分的代码等等等等我只是添加了一些文本ignoooore吧:))))))

+6

请不要张贴废话来解决网站的代码/文本要求。相反,请更详细地解释*您的代码和问题。这是**为什么**要求已到位。 –

+2

另外,为了更好地设置代码的格式,让它变得有意义并且易于阅读,这对您不会造成什么影响。 –

+0

您可能希望将代码更好一些。这会让其他人更容易阅读。 – OneSurvivor

回答

3

因为你通过set方法对其进行设置:

t2.set('a' + 1); 

a具有代码点97.因此'a'+1 == 98,因此您的结果。其次,为什么set(int)过载选择的是set(char)过载,是因为'a' + 1显然是int类型的:'a'被提升为int,然后执行加法。

+0

我怎么知道字母代码点?我是否必须运行代码,或者如果我正在测试,我可以在纸上计算出结果吗? – Muhammad

+0

@Muhammad Java字符是'Unicode',所以任何Unicode代码表都可以,例如https://unicode-table.com/en/或http://www.fileformat.info/info/unicode/index.htm或https://en.wikipedia.org/wiki/List_of_Unicode_characters或权威来源:* * HTTPS://unicode.org/charts/About.html** – Andreas