本人半桶水,我刚才在做现实100质数的程序:
[code="java"]public class test1
{
public static boolean isPrimeNumber(int n)
{
for(int i=2;i<=Math.sqrt(n);i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
public static void main(String[] arges)
{
final int s=100;
for(int i=2;i<=s;i++)
{
if(isPrimeNumber(i))
{
System.out.print(i+"\t");
}
}
}
}[/code]
21行那里,第一次写的时候把"\t"写成'\t',能编译,结果出来是一大串数字,[img]http://dl.iteye.com/upload/attachment/595892/0971afdd-fc97-33c7-a3c4-a0580bc9e17c.jpg[/img]而且保留'\t'重新编译后再执行的话那串结果会不一样的。
我想知道'\t'这东西是啥,为什么出现这个结果?(是内存方面出错?不知道是不是)
还有就是我在网上搜java '\t' "\t"或者java '\t'或者java "\t",出来的都不是我想知道的,顺便问一下如果遇到这类问题自己怎么搜答案?求经验分享
[code="java"]
public class test1
{
public static boolean isPrimeNumber(int n)
{
for(int i=2;i<=Math.sqrt(n);i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
public static void main(String[] arges)
{
final int s=100;
for(int i=2;i<=s;i++)
{
if(isPrimeNumber(i))
{
System.out.print(i+9);
}
}
}
}
[/code]
试试这段程序是不是和你的结果一致啊,如果是,那么你可以想象一下 '\t' 这个字符的整数值是9, 而9就是'\t'这个字符的ascii码,而这种转换就是自动转型。
java中单引号引起来的单个字符是char类型的,双引号 表示字符串,为一个或多个字符
java中可以直接把char类型转化成int的,相当于是ASCII码的值,\t 对应的ASCII码的值是9, System.out.print(i+'\t'); 是调用了方法
PrintStream类中的 public void println(int x), 相当于 质数的值加上9所以就出现你贴出来的那一串了,[quote]而且保留'\t'重新编译后再执行的话那串结果会不一样的[/quote] 这是不可能的,除非你的值有改变了, \t对应的ASCII码是不会变的;
后来代码改为System.out.print(i+"\t"); 相当于是 String.valueOf(i) + 制表符,是字符串拼接,是调用了PrintStream类中的 public void println(String s);
这个问题,你可以看看调用print的那个重载方法,然后再去找下原因,就容易多了,也比较有方向了;
像这种问题,可以查找的关键字有,\t对应的ASCII码、java 单引号,双引号的区别;
[quote]而且保留'\t'重新编译后再执行的话那串结果会不一样的。 [/quote]
刚试了下 每次输出都是一样的 没有出现不一样的情况
其实问题很简单的 '\t'在java里的的字符转成int 就是 9, 所以原来2 3 5。。。就变成了11 12 14.。。。。。
[code="java"]public class test
{
public static void main(String[] arges)
{
System.out.println((int)'\t');
System.out.println("test"+(char)9+"test");
}
}[/code]