关于Java, do-while循环语句的一个问题。

import java.util.Scanner;
public class jhgf{
public static void main(String[] args){
Scanner input= new Scanner(System.in);
String answer="";
do{
System.out.println("检测中。");
System.out.println("故障解决了吗?");
answer=input.next();
System.out.println("");
}while(!"y".equalsIgnoreCase(answer));
System.out.println("成功解决问题。");
}
}

程序没有问题,我的问题是为什么String answer要在do的括号外面,并且赋值为空的,这是为什么?
请帮忙详细解释一下,你看我这代码就知道,我是个非常非常外行的新手,刚入行。

这个String answer="";很好理解,就是初始化的问题,定义一个变量并且初始化是一个好习惯,在这个程序里即使你开始时不初始化,即String answer;也是可以通过的,因为在后面的do语句里面进行了赋值answer=input.next();所以程序没有问题,但是如果你在String answer;和do之间加上一条输出语句System.out.println(answer);是不能通过编译的,因为变量没有初始化或者赋值之前是不能引用的。对于String变量,初始化时可以赋值为null或者"",null表示这个string变量不指向任何任何字符串,为空;而""表示的是这个string变量指向的是一个空字符串,这点很重要,它指向了字符串,只是为一个空字符串而已,所以这里你怎么赋值都是可以的!
关于这个String answer="";是放在do的前面还do语句括号里面就看你要做什么了,如果你想在do语句里面输出每次从键盘输入的语句而不管上次敲回车之前输入的,那这个String answer="";是放在do前面还是里面都是一样的,放在前面,每次do里面的语句执行时都要重新给answer赋值:answer=input.next();,即是你这次从键盘输入的字符串;放在do括号里面也是一样,但是就体现出作用域了,同样每次赋值answer=input.next();,不同的就是每次都要定义这个answer:String answer="";这次do执行完,里面定义的这个answer变量就不存在了,下次while循环时又重新定义了。如果你想要输出包括从第一次就输入的字符串的话,你就必须把String answer="";放在do之前,并且要把answer=input.next();这句改成answer=answer+input.next();才行!
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-08
局部变量(方法里面声明的变量)在声明时一定要先赋初值,一个大括号就是一个代码块,作用范围也只在代码块的里面,在别的代码块中就访问不到了,希望对你有帮助
第2个回答  2012-03-05
因为当你在运行结束后,自己输入任何值,answer都必须为空的,每次输入的值不相同所以他在接受时为空。
第3个回答  2012-03-02
作用域的问题,变量的作用域为他外面的第一层花括号,当你放到do里面后while(!"y".equalsIgnoreCase(answer));会报语法错误,因为answer超出了作用范围,置于为什么要赋值为空是因为java规定局部变量在使用前必须初始化。
第4个回答  2012-03-02
while(!"y".equalsIgnoreCase(answer));
answer要使用到了,但是如果answer在循环里面的话,虚拟机不知道这个answer代表什么意思;
这个就是一个对象的作用域的问题,追问

还是没明白。。。怎么又扯到虚拟机了,还有作用域,这些我听都没听过,完全不明白诶。

追答

看楼下

java 的do-while的问题
是的,循环了11次,do-while语句是先执行再判断条件的~

java语言中,while 与 do?while 语句的区别是什么?
while语句,那么这两个循环语句的区别是什么?昆明北大青鸟java培训专家解答while循环语句会先判断循环条件,如果条件满足就执行循环,否则退出循环;而do?while循环语句会先执行一次循环,然后再判断循环条件是否满足(也就是说,即使循环条件一次都没有满足,do?while循环语句的循环体也会执行一遍)。这就是...

关于Java语言里的do-while循环
1: 把yes\/no部分放到switch语句后 2: 不要用do while结构了,用while结构加break语句,判断输入为no后break

简单Java程序do-while循环语句的问题(关于角谷猜想的验证)
"yes".equals(o) || "Yes".equals(o)|| "YES".equals(o)

java循环语句一点点问题
for 和while的不同,在知道循环次数的时候,一般用for,不知道用while 比如说我要跑步跑十圈,那么可以用for 如果我要跑步跑十圈,但是每圈只有在10秒内的才算是跑了一圈,这种情况就不知道要跑多少圈才算10圈,这样一般用while while do 和do while 一个是满足条件才循环,另一个是循环一次...

java do...while循环中,这段代码初始化语句为什么不是0而是1?
先说答案:如果1是0的话,就打印了11次了。所以必须是1。理解这个执行过程:在循环体内,是先执行了一次打印,再执行了i加1;while中比较i是否小于等于10,如果满足继续执行,否则停止执行;所以实际执行的次数是10 -1 + 1 = 10,正好10次。如果i=0的话,就需要将while中的条件修改为while(i <...

java中do while有什么使用特点啊
do-while循环语句其实就是while循环的变体。它的语法是:do{循环体;} while(条件); 注意:在do循环中,while条件判断之后需要添加一个分号。 do...while的循环流程是和while 循环是不同的.二者的主要区别在于循环条件和循环体计算顺序不同。比方说:public class Test{public static void main (S...

Java学习:do-while循环结构
do-while循环结构在JavaScript中扮演着重要角色,它与while循环的主要区别在于执行顺序。无论条件是否成立,循环体内的代码至少会执行一次。do-while循环的语法如下:执行流程如下:1. 先执行循环体代码;2. 紧接着检查条件是否满足,满足则再次执行循环体,不满足则退出循环。因此,与while循环不同,do-...

Java.do-while循环问题.使用do-while循环结构实现:计算1至50中是7点...
int sum = 0 , i = 1;do { if (i % 7 == 0)sum = sum + i;++i;} while (i <= 50);system.out.println("sum = " + sum);

Java循环结构-1,while和do while循环详解
Java中的循环结构是编程中不可或缺的部分,包括while、do-while和for循环。它们允许代码在满足特定条件下反复执行,而非仅执行一次,从而实现重复操作。首先,我们来看while循环,它是一种先判断后执行的循环。只要给定的布尔条件为真,就会反复执行循环体内的代码。例如,当编写一个输出图书信息的程序,...

相似回答