处理我应该对素数进行分解的任务。这是我提出的解决方案:
with open(csv_file, encoding='UTF-8') as f:
r = csv.reader(f)
for row_number, row in enumerate(r):
if row_number < 10000000:
continue
else:
process_row(row)
然而,我正在研究的一本书,强烈反对在循环中使用break语句。那么在这种情况下如果没有一个我该怎么做?
干杯!
答案 0 :(得分:2)
这是一种做法。我对我的更改做了评论:
import java.util.Scanner;
public class Task8 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Which number to factorize:");
int number = input.nextInt();
System.out.println();
int counter = 1;
for (int i = 2; i <= number; i++) {
boolean canBeFactored = true; // Add a flag
while (canBeFactored && number % i == 0) { // Add a check
if (counter == 1 && i == number) {
System.out.println("The number is a prime, can’t be factorized.");
canBeFactored = false; // Set that check to false
} else {
System.out.println("Prime" + " " + "#" + counter + ":" + " " + i);
number = number/i;
++counter;
}
}
}
}
}
答案 1 :(得分:0)
一种可能的解决方案是在休息时间内进行 return 。但这将从整个函数执行返回,这可能不是期望的结果。而且,break语句不一定不好用。请参阅this。
答案 2 :(得分:0)
在这种情况下,我认为使用“break”并没有错。虽然如果你非常不想使用它,你可以将main中的所有东西都放到一个新的子程序中,并使用“return”,如下所示:
import java.util.Scanner;
public class Task8 {
public static void main(String[] args) {
function();
}
public static void function() {
Scanner input = new Scanner(System.in);
System.out.print("Which number to factorize:");
int number = input.nextInt();
System.out.println();
int counter = 1;
for (int i = 2; i <= number; i++) {
while (number % i == 0) {
if (counter == 1 && i == number) {
System.out.println("The number is a prime, can’t be factorized.");
return;
} else {
System.out.println("Prime" + " " + "#" + counter + ":" + " " + i);
number = number/i;
++counter;
}
}
}
return;
}
}
答案 3 :(得分:0)
这本书可能意味着break
(以及continue
,return
的过度使用使代码无法读取。
E.g。而不是
for (int i = 0; i < N; i++) {
if (b)
break;
...
}
你可以写
for (int i = 0; i < N && !b; i++) { ... }
最后,我认为这只是风格问题以及您希望用代码表达的内容。
你也可以通过标记它们来打破外部循环:
outer:
for (;;) {
for(;;) {
if (<some_special_case>)
break outer; // execution...
}
}
// ...continues here
根据没有break
的情况(在破坏之前设置附加标志并在所有外部循环中检查),这可能变得相当丑陋。所以最重要的是,break
有一些有效的用例,它(在我看来)以最干净,最快捷的方式完成工作(编写代码)。