Java 如何将此代码优化为更少的代码行
如何优化此代码 我想减少代码行数Java 如何将此代码优化为更少的代码行,java,Java,如何优化此代码 我想减少代码行数 public class CoolDude { public static void main(String[] args) { for(int i = 100; i <= 500; ++i) { if(i%5 == 0 && i%11 == 0) { System.out.print("Cool Dude- "); System
public class CoolDude {
public static void main(String[] args) {
for(int i = 100; i <= 500; ++i) {
if(i%5 == 0 && i%11 == 0) {
System.out.print("Cool Dude- ");
System.out.print(i + "\n");
} else if (i%5 == 0) {
System.out.print("Cool - ");
System.out.print(i + "\n");
} else if (i%11 == 0) {
System.out.print("Dude - ");
System.out.print(i + "\n");
}
}
}
}
公共类CoolDude{
公共静态void main(字符串[]args){
对于(int i=100;i,您可以重新构造决策树,以便只需对循环中的数字进行2次检查(每次检查1次操作和1次比较)。目前,在最佳情况下,决策树需要2次操作和2次比较(i
可被5和11整除)最坏情况下的4次运算和4次比较(i
不能被5或11整除),但我们可以将其减少为始终只有2个比较和2个操作,这将导致更高性能的循环。这样,i
仅对每个数字的5和11进行一次整除性测试,因此无论循环的哪个阶段,只需进行2个操作和2个比较。这是一种opt在尝试优化循环时,应该注意亚胺化
我还将您的print
方法调用改为printf
调用,将两个print语句减为1。如果您不熟悉,可以使用以下方法
现在,做所有这些只会将代码的大小减少1行,虽然我相信通过一些巧妙的使用或其他方法可以进一步减少,但作为一般规则,通过行数衡量代码质量是一个糟糕的指标,永远不应该使用,特别是当我们谈论Java这样的编译语言时我可以对下面的代码做很多事情,以牺牲可读性和/或性能为代价来减少行数,但是除了程序员之间的竞争之外,没有什么真正的意义,比如(但即使这样,你也在竞争最低的字符数,而不是行数)
与其追求更短的代码,不如追求最好的代码,这样代码的性能就更高,更少的代码行不一定与性能相关
公共类CoolDude{
公共静态void main(字符串[]args){
对于(int i=100;i,您可以重新构造决策树,以便只需对循环中的数字进行2次检查(每次检查1次操作和1次比较)。目前,在最佳情况下,决策树需要2次操作和2次比较(i
可被5和11整除)最坏情况下的4次运算和4次比较(i
不能被5或11整除),但我们可以将其减少为始终只有2个比较和2个操作,这将导致更高性能的循环。这样,i
仅对每个数字的5和11进行一次整除性测试,因此无论循环的哪个阶段,只需进行2个操作和2个比较。这是一种opt在尝试优化循环时,应该注意亚胺化
我还将您的print
方法调用改为printf
调用,将两个print语句减为1。如果您不熟悉,可以使用以下方法
现在,做所有这些只会将代码的大小减少1行,虽然我相信通过一些巧妙的使用或其他方法可以进一步减少,但作为一般规则,通过行数衡量代码质量是一个糟糕的指标,永远不应该使用,特别是当我们谈论Java这样的编译语言时我可以对下面的代码做很多事情,以牺牲可读性和/或性能为代价来减少行数,但是除了程序员之间的竞争之外,没有什么真正的意义,比如(但即使这样,你也在竞争最低的字符数,而不是行数)
与其追求更短的代码,不如追求最好的代码,这样代码的性能就更高,更少的代码行不一定与性能相关
公共类CoolDude{
公共静态void main(字符串[]args){
对于(int i=100;i而言,下面的代码行应该会减少,尽管它似乎运行得不快。它还修正了连字符周围的间距,并可能简化了逻辑
public class CoolDude {
public static void main(String args[]) {
for (int i = 100; i <= 500; ++i) {
StringBuilder coolDude = new StringBuilder(15); //15 chars max "Cool Dude - 495"
if (i % 5 == 0) {
coolDude.append("Cool ".toCharArray());
}
if (i % 11 == 0) {
coolDude.append("Dude ".toCharArray());
}
if (coolDude.length() > 0) {
System.out.println(coolDude.append(("- " + i).toCharArray()));
}
}
}
}
公共类CoolDude{
公共静态void main(字符串参数[]){
对于(int i=100;i 0){
System.out.println(coolDude.append((“-”+i.tocharray());
}
}
}
}
修订:
我的观点是,可以利用每次循环只进行一次mod计算的优势。这在尝试使用StringBuilder和一行代码来节省时间时迷失了方向(正如其他人指出的,这不是一个值得追求的目标)。我通过使用print和println进行了澄清
public class CoolDude {
public static void main(String args[]) {
boolean printed = false;
for (int i = 100; i <= 500; ++i, printed = false) {
if (i % 5 == 0) {
System.out.print("Cool ");
printed = true;
}
if (i % 11 == 0) {
System.out.print("Dude ");
printed = true;
}
if (printed) {
System.out.println("- " + i);
}
}
}
}
公共类CoolDude{
公共静态void main(字符串参数[]){
布尔值=假;
对于(int i=100;i而言,下面的代码行应该会减少,尽管它似乎运行得不快。它还修正了连字符周围的间距,并可能简化了逻辑
public class CoolDude {
public static void main(String args[]) {
for (int i = 100; i <= 500; ++i) {
StringBuilder coolDude = new StringBuilder(15); //15 chars max "Cool Dude - 495"
if (i % 5 == 0) {
coolDude.append("Cool ".toCharArray());
}
if (i % 11 == 0) {
coolDude.append("Dude ".toCharArray());
}
if (coolDude.length() > 0) {
System.out.println(coolDude.append(("- " + i).toCharArray()));
}
}
}
}
公共类CoolDude{
公共静态void main(字符串参数[]){
对于(int i=100;i 0){
System.out.println(coolDude.append((“-”+i.tocharray());
}
}
}
}
修订:
我的观点是,可以利用每次循环只进行一次mod计算的优势。这在尝试使用StringBuilder和一行代码来节省时间时迷失了方向(正如其他人指出的,这不是一个值得追求的目标)。我通过使用print和println进行了澄清
public class CoolDude {
public static void main(String args[]) {
boolean printed = false;
for (int i = 100; i <= 500; ++i, printed = false) {
if (i % 5 == 0) {
System.out.print("Cool ");
printed = true;
}
if (i % 11 == 0) {
System.out.print("Dude ");
printed = true;
}
if (printed) {
System.out.println("- " + i);
}
}
}
}
公共类CoolDude{
公共静态void main(字符串参数[]){
布尔值=假;
对于(inti=100;i,虽然它非常准确并纠正了您问题中发现的所有信念,但它仍然回答了您的问题,试图将陈述的数量减到最少
public class CoolDude {
public static void main(String[] args) {
for (int i = 100; i <= 500; i++)
if (i % 5 == 0 || i % 11 == 0) // This is the condition where we decide to print something
System.out.printf("%s%s- %d%n", i % 5 == 0 ? "Cool " : "", i % 11 == 0 ? "Dude " : "", i);
}
}
公共C类