为什么我的变量不会加在一起,这些对账单?

我工作的一些初级Java的逻辑,我不知道为什么,这是行不通的。 这里有一个方法,我做了:

private void printSubclassBoxes(){ int coordinateX = ((getWidth() - BOX_WIDTH) /4); for ( int i = 0; i < 3; i++){ double coordinateY = (getHeight() / 2); GRect classBox = new GRect (coordinateX, coordinateY, BOX_WIDTH, BOX_HEIGHT); GLabel classLabel = new GLabel ("Program"); double labelCoordinateX = (coordinateX + ((classBox.getWidth() / 2) - (classLabel.getWidth() / 2))); double labelCoordinateY = (coordinateY + ((classBox.getHeight() / 2) + (classLabel.getAscent() / 2))); add(classBox); add(classLabel, labelCoordinateX, labelCoordinateY); if (i == 1){ coordinateX = (((getWidth() - BOX_WIDTH) /4) * 2); } if (i == 2){ coordinateX = (((getWidth() - BOX_WIDTH) /4) * 3); } } }

现在,我敢肯定,有可能是更好的方法来做到这一点,但请 - 我现在在这种权利不感兴趣(我想学习而不会被spoonfed答案)。 所有我想知道的是,为什么结束两个if语句不喜欢的工作,我认为他们应该。

为了简单起见,假设

100 = ((getWidth() - BOX_WIDTH) int coordinateX = 25;

我的理解是int i到达了第一个if语句,并增加了25 + 25这样的话coordinateX = 50。

然后在循环下一次,我= 2这么coordinateX会= 75。

这是我很期待的事情发生,但事实并非如此。 我似乎打印第一两箱直接在彼此的顶部上,然后将第三移动25。

感谢您的帮助球员。 现在,我得到的环想通了,我继续解决它以不同的方式。 我最终分配coordinateX另一个变量并用它来添加到末尾:

int coordinateX = ((getWidth() - BOX_WIDTH) /4); int otherCoordinateX = coordinateX; for ( int i = 0; i < 3; i++){ double coordinateY = (getHeight() / 2); GRect classBox = new GRect (coordinateX, coordinateY, BOX_WIDTH, BOX_HEIGHT); GLabel classLabel = new GLabel ("Program"); double labelCoordinateX = (coordinateX + ((classBox.getWidth() / 2) - (classLabel.getWidth() / 2))); double labelCoordinateY = (coordinateY + ((classBox.getHeight() / 2) + (classLabel.getAscent() / 2))); add(classBox); add(classLabel, labelCoordinateX, labelCoordinateY); coordinateX = otherCoordinateX + coordinateX; }

--------------解决方案-------------

在循环第一次迭代:

  • i = 0
  • coordinateX = 25符合市场预期。

在迭代结束coordinateX 更新(因为i == 0

然后,在第二次迭代:

  • i = 1
  • 但还是coordinateX = 25因为它没有被更新。

在第二迭代结束时coordinateX因为更新if i == 1)试验。

第三次迭代

  • i = 2
  • 的新值coordinateX被使用,其被设置在第二迭代结束。

不改变在任何必需的方式代码时,只需更换if (i == 1)通过if (i == 0)并且if (i == 2)if (i == 1)

编辑:课程

for(...) { } declaration时, i < 3试验,检查在每次迭代开始,但i++部分被称为在每次迭代结尾。

你只要有一个关闭的情况的一个循环指标的问题。 第一次通过你的循环, i0没有1 第二次通过,这是1而不是2 改变你的线路if (i == 1)if (i == 2)if (i == 0)if (i == 1)分别将解决您的问题。

它仍然是一个不可思议的方式来做循环,虽然。 更标准的方式做这将是建立一个incrementX变量,例如,然后就无条件地,每次通过循环添加。

既然你想“下一次迭代”前,增加的价值,你应该做的第一/第二和第二/第三,但你把变量更新之间coordinateX在循环结束时,你应该使用不同的索引01

这是什么意思?

这工作:

for ( int i = 0; i < 3; i++)
{
/* other part of the loop */
if (i == 0)
coordinateX = (((getWidth() - BOX_WIDTH) /4) * 2);
else if (i == 1)
coordinateX = (((getWidth() - BOX_WIDTH) /4) * 3);
}

但这个工程太:

for ( int i = 0; i < 3; i++)
{
if (i == 1)
coordinateX = (((getWidth() - BOX_WIDTH) /4) * 2);
else if (i == 2)
coordinateX = (((getWidth() - BOX_WIDTH) /4) * 3);
/* other part of the loop */
}

可能看起来像一个蹩脚的答案,但是这是我做的这些情况。 放了一堆的打印报表,所以当它循环,你可以验证你得到的输出是你期待。 如果它不是在某一个点上,开始尝试以确定原因。

分类:java的 时间:2012-01-01 人气:0
本文关键词: java的
分享到:

相关文章

  • 杀死在Java中的目录中的所有进程(Windows)中 2012-01-01

    有没有一种方法,我可以通过Java停在某个目录的所有进程? 我需要我的java程序停止我的C在目录中的"X"的所有进程:\驱动器. --------------解决方案------------- 可以从Java控制台命令启动,例如 Process p = Runtime.exec("taskkill /IM notepad.exe"); int exitValue = p.waitFor(); 有来自Sysinternals的工具套件. 您可以查询进程并采取行动,它

  • 是否线程问题的C / C ++“系统级的程序员”显著不同,所面临的Java程序员? 2012-01-01

    我在寻找一个发展工作,看到很多上市规定,开发商必须在多线程来熟悉. 这似乎为Java工作列表,以及C ++的房源涉及"系统编程"在UNIX上. 在过去的几年里,我一直在与Java和使用它的各种同步机制. 在90年代末我做了很多C ++的工作,虽然很少线程. 在大学里,但是,我们在使用Solaris线程. 我的问题是,是否有开发商在C / C ++的脸相比,开发人员在Java中,这些问题显著的差异,以及是否有任何的技术来解决这些问题有根本的区别. Java的显然包括一些更好的机制和收藏同

  • 关于Java格式化日期 2012-01-01

    我有一个具有以下格式的字符串:janu​​ary_2005(MMMMMMM_yyyy) 我想将其转换为一个MySQL接受的日期值插入它在数据库上. 我需要做它的Java. 有谁知道怎么办呢? 谢谢 --------------解决方案------------- 这样的事可能会做的伎俩, SimpleDateFormat myFormat = new SimpleDateFormat("MMMM_yyyy"); Date aDate; try { aDate = myFormat.par

  • Java的布尔实施的valueOf的() 2012-01-01

    虽然周围的JDK 1.7源戳我注意到Boolean.java这些方法: public static Boolean valueOf(String s) { return toBoolean(s) ? TRUE : FALSE; } private static boolean toBoolean(String name) { return ((name != null) && name.equalsIgnoreCase("true")); } 所以valueOf()在内

  • java.lang.OutOfMemoryError:在Tomcat中使用Eclipse的PermGen空间 2012-01-01

    使用eclipse Tomcat上运行我的应用程序时,经常我得到这个异​​常: java.lang.OutOfMemoryError: PermGen space at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.defineClass(ClassLoader.jav

  • 是否有可能从Java小程序发送一个文件,而MySQL来PHP? 2012-01-01

    是否有可能发送图片或文件从Java小程序到产生PDF格式的PHP脚本. 到现在为止我的Java小程序具有您可以保存小程序的截图中的用户选择的目录,用户可以保存测试结果在PDF形式的机会. 但我想t将其合并到一个文件,我想避免与数据库工作. --------------解决方案------------- 是的,它甚至不会意义用于此一数据库(除非这是测试结果的来源). 只要上传截图/结果为一个POST请求,然后用PHP生成PDF. 所以,你想要的是渲染PDF结合两者,图像和测试结果吧? 处理框架有一

  • 我怎样才能确定一个不同的进程ID使用Java或JRuby的在Linux上运行? 2012-01-01

    我需要看到一个给定的进程ID运行,它必须工作在Java或JRuby的(最好是一个Ruby的解决方案). 它可以是取决于系统的Linux操作系统(特别是Debian和/或Ubuntu). 我已经有我要找的PID,只需要看看它是否正在运行. 更新: 感谢所有的答复大家! 我很感激​​,但是这不是我要找的......我在一个标准的Ruby库希望的东西完全是(或Java,但最好红宝石)......如果没有这样的库调用的存在,我可能会坚持使用procfs的解决方案,我已经有了. -------------

  • 春天的形式 - 的ModelAttribute名称如Java不变 2012-01-01

    为了不重复自己在代码中我使用modelAttribute名称如Java不变 @Controller @RequestMapping("/") public class Controller { public static final String MODEL_ATTRIBUTE = "myModel"; public String renderPage(Model model) { model.addAttribute(MODEL_ATTRIBUTE, ...);

  • 我能逃脱在Java的MessageFormat括号? 2012-01-01

    我想输出在Java的MessageFormat一些支撑. 例如我知道下面不工作: MessageFormat.format(" public {0} get{1}() {return {2};}\n\n", type, upperCamel, lowerCamel); 是否有逃避周围的"回{2}"大括号的一种方式? --------------解决方案------------- 你可以把它们放在里面的单引号如 '{'return {2};'}' 在这里看到更多的细节

  • JProfiler的5.2.4 + IBM WAS 7 64位的,Java 1.6的 2012-01-01

    我想配置的JProfiler,并收到以下错误上推出的WAS native_stderr.log文件. 我下载了64位的JProfiler 5×版本. 该向导配置是干净的. 不知道这是为64位的问题,或者JProfiler的. 谢谢! JVMJ9TI001E代理库jprofilerti无法打开(jprofilerti.dll不是有效的Win32应用程序.)JVMJ9VM015W初始化错误图书馆j9jvmti24(-3):JVMJ9VM009E J9VMDllMain失败无法创建Java虚拟机. -

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.263 (s). 10 q(s)