为什么每个人都告诉我编写这样的代码是一种不好的做法?
if (foo)
    Bar();
//or
for(int i = 0 i < count; i++)
    Bar(i);
省略花括号的最大理由是它有时可以是它们的两倍.例如,下面是一些为C#中的标签绘制发光效果的代码.
using (Brush br = new SolidBrush(Color.FromArgb(15, GlowColor)))
{
    for (int x = 0; x <= GlowAmount; x++)
    {
        for (int y = 0; y <= GlowAmount; y++)
        {
            g.DrawString(Text, this.Font, br, new Point(IconOffset + x, y));
        }
     }
 }
 //versus
using (Brush br = new SolidBrush(Color.FromArgb(15, GlowColor)))
    for (int x = 0; x <= GlowAmount; x++)
        for (int y = 0; y <= GlowAmount; y++) …我查看了Raphael.js源代码,了解他如何将RGB值转换为HSB.我发现了他所做的功能,当我碰到这个漂亮的三嵌套三元运算符时,我正在将它转换为Python:
H = (C == 0 ? null :
    V == r ? (g - b) / C :
    V == g ? (b - r) / C + 2 :
             (r - g) / C + 4
    );
它引发了我一个循环,因为Python没有Javascript所做的那种三元运算符.我花了一段时间查看它并最终将这个有点理智的代码(仅使用if/else)从中删除:
if (C == 0) {
    H = null;
} else {
    if(V == r) {
        H = (g - b) / C;
    } else {
        if(V == g) {
            H = (b - r) / C + 2; …今年开始编程的我的一位大学同事有时写下这样的陈述:
if(something) doA();
else
    if(something2) doC();
    else doD();
他被认为第二if-else对被视为单个实体,并且它实际上嵌套在第一对之下else.
但是,我确信他的代码相当于:
if(something) doA();
else if(something2) doC();
else doD();
这表明第二个else实际上并不是嵌套的,而是与第一个if相同的级别.我告诉他,他需要用花括号来达到他想要的效果.
"但我的代码按预期工作!"
事实上,它按预期工作.事实证明代码的行为是相同的,即使else没有嵌套.
令人惊讶的是,我发现自己无法写出一个清晰简洁的例子,显示出不同的行为
if(something) doA();
else
    if(something2) doC();
    else doD();
和
if(something) doA();
else {
    if(something2) doC();
    else doD();
}
你能帮我找一个例子,告诉我的同事使用/不使用花括号之间的区别吗?
或者,就行为而言,看起来不正确的版本总是等同于花括号的版本?
对于任何这样放置大括号的人:
void f() {
    stuff();
}
您更喜欢如何在长初始化列表之后放置大括号?
一样的方法?
Object::Object()
    : foo(1)
    , bar(2) {
    stuff();
}
或者例外,这样你就可以真正看到初始化列表的结束位置?
Object::Object()
    : foo(1)
    , bar(2)
{
    stuff();
}
或者留一个空行?
Object::Object()
    : foo(1)
    , bar(2) {
    stuff();
}
或者也许制作一个奇怪的混合体?
Object::Object()
    : foo(1)
    , bar(2)
    {
    stuff();
}
或者滥用缩进
Object::Object()
: foo(1)
, bar(2) {
    stuff();
}
Object::Object() : foo(1)
                            , bar(2) {
    stuff();
}
在这个小例子中,一切都很漂亮,但是启动了十几个初始化程序和一个中等长度的函数体,这很快就会发生变化。
所以我试图创建一个非常简单的程序来练习一些基本的Java格式化技巧.然而,关于"fight()"的一些事情正在让我的编译器疯狂.谁知道为什么?提前感谢我收到的任何答案,代码如下:
class Hero{
    String name;
    int Intelligence;
    boolean parents;
    public static fight(Hero1, Hero2){
    if(Hero1.Intelligence>Hero2.Intelligence){
        return(Hero1.name+" is the winner");
    else
        return(Hero2.name+" is the winner");
        }
    }
}
class HeroMain{
    public static void main(String[] args){
    Hero Superman = new Hero();
    Superman.name = "Superman";
    Superman.Intelligence = 7;
    Superman.parents = false;
    Hero Batman = new Hero();
    Batman.name = "Batman";
    Batman.Intelligence = 8;
    Batman.parents = false;
    public fight(Superman, Batman);
    }
}
我是java的新手,试图从这本书中学习一门课程并且我坚持制作一个程序.如果没有错误并且无法找到标记为guessdigit1&2的符号,请继续告诉我.
当我将鼠标悬停在符号旁边的错误对话框上时,它一直说guessdigit1和2是他们自己的类.任何的想法?谢谢!
package loterry;
import java.util.Scanner;
public class Loterry {
// This program creates two random numbers, and checks to see if your guess
    // makes the lottery win
    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter in your guess for loterry, two digits please");
        int lottery = (int)(Math.random()*100 /50);
        int guess = input.nextInt();
        int lotterydigit1= lottery /10;
        int lotterydigit2= lottery %10;
        // Get digits from guess
        int guessdigit1 = guess / 10;
        int guessdigit2 = …嗨,我想在 WPF 中最大化窗口,我使用以下几行:
private void mnu_maximize_Click(object sender, RoutedEventArgs e)
{
    if (main.WindowState == System.Windows.WindowState.Maximized)
        main.WindowState = System.Windows.WindowState.Normal;
    main.WindowState = System.Windows.WindowState.Maximized;
}
但问题是当我再次单击以将恢复窗口恢复到正常状态时,它无法正常工作并且处于最大化状态。
那么我该如何解决这个问题?
java ×3
c ×2
c# ×2
c++ ×2
coding-style ×2
if-statement ×2
javascript ×1
methods ×1
nested ×1
wpf ×1