这个java程序中 输出结果中的null是怎么来的?

作者&投稿:贺顺 (若有异议请与网页底部的电邮联系)
java:为什么输出的结果是null,而不是一个路径?~

因为程序自上而下执行,你在for循环中调用了 search(files[i])方法,该方法有返回值,但是你没有获取,所以即使在方法中执行后返回了非空的值,你也没有获取到。那么for循环执行完毕以后退出,整个过程你没有给name赋值所以程序最后
执行完后就是null。

修改方案:
只需要修改search(File file方法,捕捉for循环里面方法的值
public String search(File file) {
String name = null;
if (file.isFile()) {
if (file.getAbsolutePath().endsWith(filename))
name = file.getAbsolutePath();
} else if (file.isDirectory()) {
String ret="";
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
ret = search(files[i]);
if(null!=ret&&!"".equals(ret)){
break;
}
}
name=ret;
}
return name;
}


报空指针异常的原因是File[] files = file.listFiles();返回null
所以代码可以改为
修改方案:
只需要修改search(File file方法,捕捉for循环里面方法的值
public String search(File file) {
String name = null;
if (file.isFile()) {
if (file.getAbsolutePath().endsWith(filename))
name = file.getAbsolutePath();
} else if (file.isDirectory()) {
String ret="";
File[] files = file.listFiles();
if(null!=files){
for (int i = 0; i < files.length; i++) {
ret = search(files[i]);
if(null!=ret&&!"".equals(ret)){
break;
}
}
}
name=ret;
}

第一行输出之所以是null,因为sideUp是成员变量没有赋值,而直接输出这个变量自然就为null了。
import java.util.Random;

public class Coin
{
private String sideUp;
public static void main(String[] args)
{
Coin a1 = new Coin();
System.out.println(a1.getSideUp());
int count=0;
for (int i = 0; i < 20; i++)
{
a1.toss();
if(a1.getSideUp().equals("heads"))
{
count++;
}
System.out.println(a1.getSideUp());
}
System.out.println("heads出现次数:"+count);
}
public void toss()
{
Random random = new Random();
int faceup = random.nextInt(2);
if (faceup == 1)
sideUp = "heads";
if (faceup == 0)
sideUp = "tails";
}
public String getSideUp()
{
return sideUp;
}
public boolean isHeadsUp(int faceup)
{
if (faceup == 1)
return true;
else
return false;
}
}

你main方法的第2行
dog1.back();
输出的
此时你刚new出来的dog1,其name属性是null
所以打出来的null

一开始调用dog1.bark()的时候,dog1的name还没有赋值,所以是引用的初始值null


闸北区18778823691: 在java中输出结果时的\n的位置不同而导致的结果是什么 -
晏转感苏: \n 是换行符,你的代码中有几个“\n”,在输出结果中就会换几行.代码中哪个位置有"\n",在输出结果中该位置就会换行.

闸北区18778823691: 在JAVA中输出语句输出的时候是n回车n,还是n n,语句执行完后是回车还是在同一行???? -
晏转感苏: System.out.println(); 在当前行输出完以后,换到下一行 System.out.print(); 在当前行输出完不换行 输入n,并不能换行,只是输出字母n,java里需要特殊符号的要使用转意符'\' 如:换行是\n 回车换行是 \r\n

闸北区18778823691: java编程!!用户从键盘输入一个整数n,程序求出n的累加和并输出.(如:1+2+3+4+……+n) -
晏转感苏: 使用for循环即可,代码如下:import java.util.Scanner; public class Demo07 { public static void main(String[] args) { System.out.println("请输入你要求和的数:");//提示用户输入 Scanner in = new Scanner(System.in); int max = in.nextInt()...

闸北区18778823691: 编写一个JAVA程序,把变量n的初始值设置为1678,然后利用除法和取余运算把变量的每位数字都提出来 -
晏转感苏: public class number {void num(){int a,b,c,d;int n = 1678;a = n%10;b = n/10%10;c = n/100%10;d = n/1000;System.out.println(d);System.out.println(c);System.out.println(b);System.out.println(a);} public static void main(String[] args){number s = new number();s.num();} }写的很糙,请指教.

闸北区18778823691: 编写一个JAVA程序输出: N 10*N 100*N 1000*N 1 10 100 1000 2 20 200 2000 3 30 300 3000 4 40 400 4000 -
晏转感苏: public class test { public static void main(String args[]) {// 输出5行for (int i = 0; i // 输出4列for (int j = 1; j // 当i==0时输出标题栏if (i == 0) {// 过滤j=1的时候输出1*N的这种情况if (j - 1 == 0)// "/t"表示退格键,为了让输出对齐System.out.print(...

闸北区18778823691: 用java循环语句编写程序,求正整数n的阶乘n!并输出,其中n由用户输入赋值 -
晏转感苏: import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); int result = 1; for (int i = 1; i <= n; i++) { result *= i; } System.out.println(result); } }

闸北区18778823691: java中输出结果为NaN 是怎么回事?麻烦指教一下 -
晏转感苏: 不是数字的意思.not a number

闸北区18778823691: 怎样用java编写程序求n!,并且n的值由键盘输入. -
晏转感苏: import java.util.Scanner;//递归法求阶乘,eclipse编译通过public class Test {public static void main(String srag[]){int num = 0;while(true){System.out...

闸北区18778823691: 编写一个完整的 Java程序 MyOdd,输入正整数 n,输出 n以内的奇数之和.越简单越好~
晏转感苏: 用到循环的真的是初中没念好吧连续和=(首项+末项)*项数÷2,计算中关键要注意项数若n为偶数,则奇数和=(1+n-1)*(n/2)/2=(n^2)/4 表示4分之n方 偶数和=(2+n)*(n/2)/2=(n^2)/4 +n/2若n为奇数,则奇数和=(1+n)*((n+...

闸北区18778823691: java程序中%s\n是什么意思? -
晏转感苏: java中沿用C输出习惯的用法%s代表当前位置输出字符串(String) \n代表一个换行 执行 System.out.printf("%s\n","hello"); System.out.println("new line"); 将输出 hello new line

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网