我该如何检查,如果一个变量已经被初始化

首先,我是相当新的Java中,很抱歉,如果这个问题是完全简单。

问题是:我有一个String[] s通过将一个字符串,其中每一个项目是一个数字制作。 我要投的项目sint[] n

s[0]包含的项目数n将举行,有效s.length-1 我想用一个foreach循环来做到这一点:

int[] n; for(String num: s){ //if(n is not initialized){ n = new int[(int) num]; continue; } n[n.length] = (int) num; }

现在,我意识到,我可以用这样的事情:

int[] n = new int[(int) s[0]]; for(int i=1; i < s.length; i++){ n[i-1] = (int) s[i]; }

但我敢肯定,我将面临着在未来,“如果n不初始化,初始化”的问题。

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

你不能投一个Stringint Java是强类型的,并没有隐式类型转换就像你可能会发现一个脚本语言。

要将转换Stringint使用显式转换,像Integer.parseInt(String)

所有的成员变量和数组的元素都是用缺省值初始化。 对于int类型,该值为0。对于引用类型(任何亚型Object ),默认值为null 。 局部变量没有得到一个默认值,但是编译器分析代码,以确保一个值赋值的变量被读取之前。 如果不是,该代码将无法编译。

我想你想的是这样的:

int[] n = new int[Integer.parseInt(s[0]);
for (int idx = 0; idx < n; ++idx)
n[idx] = Integer.parseInt(s[idx + 1]);

你不能检查,如果一个变量是在你的代码中初始化,因为根据定义读数可能没有初始化导致编译时错误的变量。

您可以初始化变量, null ,并检查该 ,如果您的变量不是原始类型null不是初始化后的有效值。

在具体的例子中,你表现出的第二个代码一定会更干净。

int[] n = null;
for(String num: s){
if(n == null){
n = new int[(int) num];
continue;
}
n[n.length] = (int) num;
}

你可能想看看在集合框架中的其他数据结构。

- > http://java.sun.com/developer/onlineTraining/collections/Collection.html

ArrayList的是一个合理的很好的替代阵列

你唯一可以做的是检查对null 。 如果你的代码是一个方法中,它不会编译,如果你不初始化。 所以,如果它编译并运行你知道它被初始化为至少null ,然后执行null检查。

正如其他人所指出的,最接近一个“正确的方式”来做到这一点是初始化数组为null。

在其他各点:

“N [n.length]”会抛出一个“索引越界”异常。 阵列具有元素范围从0到长度-1。 在任何情况下,我觉得你打算在第一种情况下说什么是“N [0]”,并在第二个是“N [I]”。

存储在第一个元素的数组的大小可能是一个坏主意。 它可以为一个int数组来完成,但是这将是混乱的一个String数组,它不会为布尔数组在所有的工作。 即使在整型的情况下,你现在混合在相同的数据结构,它很可能是令人困惑的两种不同的事物。 如果数组大小是固定的,“长度”拥有大小反正。 如果数组的大小是可变的,你以为你要创建一个数组足够大,然后存储你实际使用的金额,你最好使用ArrayList的,它可以处理动态大小的数组干净。

您可以检查null

int[] n;
for(String num: s){
if(n == null) {
n = new int[(int) num];
}
n[n.length] = (int) num;
}

请注意,如果n是一个类成员,这只能发生。 如果它是一个局部变量,编译器不会让你用它做任何事情没有它被初始化。

如果你初始化变量或对象为null之前使用它们,

String myVar1 = null;
Person bobby = null;

您可以在变量或对象比较不为空,

if (myVar != null) {
// myVar has a value.
}

我遇到了这个问题,如果检查int已经初始化。 在我的程序,这是可能的,它被初始化为0因此检查if (int i = 0)不会做太大的好处。

作为解决方案/变通,我创建了一个boolean ,当它被设置变量int初始化。 希望这可以帮助。

分类: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.344 (s). 10 q(s)