更具表现力的代码
More Expressive Code
是否有更智能的方法来编写此代码,避免在 WHILE 和 IF 中重复条件 (answer<200)?
public class HelloWorld
{
public static void main(String[] args)
{
perfectSquareBetweenFifteenAndTwoHundred();
}
}
void perfectSquareBetweenFifteenAndTwoHundred(){
int i=1;
int answer=0;
while(answer<200)
{
answer = i*i;
if(answer>15 && answer<200)
{
System.out.println(i*i);
}
i++;
}
}
}
谢谢。
将它写成一个 for 循环,并带有适当的边界(从 4 开始,因为 4*4=16 > 15
和 3*3=9 < 15
;在 14 结束,因为 14*14=196 < 200
和 15*15=225 > 200
:
for (int i = 4; i <= 14; ++i) {
System.out.println(i*i);
}
如果你想让数字 4 和 14 相对于 15 和 200 的界限少 "magical",你可以这样写循环:
for (int i = (int) Math.ceil(Math.sqrt(15)), squared;
(squared = i * i) < 200; ++i) {
System.out.println(squared);
}
如果你想保留 while 循环,你可以这样做:
public class HelloWorld {
public static void main(String[] args){
perfectSquareBetweenFifteenAndTwoHundred();
}
void perfectSquareBetweenFifteenAndTwoHundred(){
int i=4;
int answer=0;
while(answer<200){
System.out.println(answer);
answer = i*i;
i++;
}
}
}
以上代码的工作原理如下:
基本上每次迭代打印出的答案都是根据前一次迭代计算得出的。
老实说,您应该避免编写这种代码,因为它依赖于前一次迭代的变量状态,而且乍一看代码的工作原理并不明显。
public class MyClass {
public static void main(String[] args) {
for (int i = 1; true; i++) {
int square = i * i;
if (square > 200) {
return;
}
if (square > 15) {
System.out.println(square);
}
}
}
}
是否有更智能的方法来编写此代码,避免在 WHILE 和 IF 中重复条件 (answer<200)?
public class HelloWorld
{
public static void main(String[] args)
{
perfectSquareBetweenFifteenAndTwoHundred();
}
}
void perfectSquareBetweenFifteenAndTwoHundred(){
int i=1;
int answer=0;
while(answer<200)
{
answer = i*i;
if(answer>15 && answer<200)
{
System.out.println(i*i);
}
i++;
}
}
}
谢谢。
将它写成一个 for 循环,并带有适当的边界(从 4 开始,因为 4*4=16 > 15
和 3*3=9 < 15
;在 14 结束,因为 14*14=196 < 200
和 15*15=225 > 200
:
for (int i = 4; i <= 14; ++i) {
System.out.println(i*i);
}
如果你想让数字 4 和 14 相对于 15 和 200 的界限少 "magical",你可以这样写循环:
for (int i = (int) Math.ceil(Math.sqrt(15)), squared;
(squared = i * i) < 200; ++i) {
System.out.println(squared);
}
如果你想保留 while 循环,你可以这样做:
public class HelloWorld {
public static void main(String[] args){
perfectSquareBetweenFifteenAndTwoHundred();
}
void perfectSquareBetweenFifteenAndTwoHundred(){
int i=4;
int answer=0;
while(answer<200){
System.out.println(answer);
answer = i*i;
i++;
}
}
}
以上代码的工作原理如下: 基本上每次迭代打印出的答案都是根据前一次迭代计算得出的。 老实说,您应该避免编写这种代码,因为它依赖于前一次迭代的变量状态,而且乍一看代码的工作原理并不明显。
public class MyClass {
public static void main(String[] args) {
for (int i = 1; true; i++) {
int square = i * i;
if (square > 200) {
return;
}
if (square > 15) {
System.out.println(square);
}
}
}
}