相关疑难解决方法(0)

在循环之前或循环中声明变量之间的区别?

我一直想知道,一般来说,在循环之前声明一个抛弃变量,而不是在循环内部重复,是否会产生任何(性能)​​差异?Java中的一个(毫无意义的)示例:

a)循环前的声明:

double intermediateResult;
for(int i=0; i < 1000; i++){
    intermediateResult = i;
    System.out.println(intermediateResult);
}
Run Code Online (Sandbox Code Playgroud)

b)声明(重复)内循环:

for(int i=0; i < 1000; i++){
    double intermediateResult = i;
    System.out.println(intermediateResult);
}
Run Code Online (Sandbox Code Playgroud)

哪一个更好,一个还是b

我怀疑重复变量声明(例子b)在理论上会产生更多的开销,但是编译器足够聪明,所以它并不重要.实施例b具有更紧凑的优点,并且将变量的范围限制在其使用的位置.尽管如此,我倾向于根据示例来编码一个.

编辑:我对Java案件特别感兴趣.

java variables performance loops initialization

307
推荐指数
14
解决办法
13万
查看次数

在循环中声明变量,良好实践或不良实践?

问题#1:在循环中声明一个变量是一个好习惯还是坏习惯?

我已经阅读了其他关于是否存在性能问题的线程(大多数说没有),并且您应该始终将变量声明为接近它们将被使用的位置.我想知道的是,这是否应该避免,或者它是否真的是首选.

例:

for(int counter = 0; counter <= 10; counter++)
{
   string someString = "testing";

   cout << someString;
}
Run Code Online (Sandbox Code Playgroud)

问题2:大多数编译器是否已经声明变量已经被声明并且只是跳过了那个部分,或者它实际上每次都在内存中为它创建了一个位置?

c++ loops variable-declaration

229
推荐指数
4
解决办法
11万
查看次数

Java中的匿名代码块

Java中是否存在匿名代码块的实际用途?

public static void main(String[] args) {
    // in
    {
        // out
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这不是关于命名块,即

name: { 
     if ( /* something */ ) 
         break name;
}
Run Code Online (Sandbox Code Playgroud)

.

java

62
推荐指数
6
解决办法
4万
查看次数

在循环中创建新对象的效率

我不确定这个问题是否与语言无关,所以我只想将其作为一个Java问题.如果你有一个像循环

for (int i = 0; i < 9; i++) {
    Object obj = new Object;
    // fill object
    // do something with data
}
Run Code Online (Sandbox Code Playgroud)

内存中的新空间是通过循环的每次迭代创建的吗?如果是这样,旧空间是否被处理?如果没有,做这样的事情会更有效率

Object obj = new Object;
for (int i = 0; i < 9; i++) {
    // fill object
    // do something with data
}
Run Code Online (Sandbox Code Playgroud)

编辑:更新代码以更好地举例说明问题

java memory loops

8
推荐指数
2
解决办法
4551
查看次数

从RandomAccessFile读取数据产生不正确的结果 - Java

我有一个42行的文本文件.每行包含超过22,000个以逗号分隔的数字.

我想从每一行中提取某些数字,并且我有一个长度为1000的int数组,其中包含从这42行中的每一行中需要的1,000个数字.

例如,如果数组包含43,1,3244,则意味着我需要从第一行到第42行开始的第43个数字,第1个数字和第3244个数字.

我的for循环似乎不起作用,它只读取文本文件中第一行有42行220000个数字,我不知道它出错了.

for(int i=0;i<42;i++){ //irretates through the 42 lines of 
    counter=1; // to keep track about on which line the code is working
    System.out.println("Starting line"+i);

    st2=new StringTokenizer(raf1.readLine(),",");
    //raf3 is a RandomAccessFile object containing the 42 lines

    a:while(st2.hasMoreTokens()){
        b=is_there(array2,counter);
        // is_there is a method that compares the rank of the taken being read with 
       //the whole array that has the 1000 numbers that i want. 
        if(b==false){ 
            // if the rank or order of token [e.g. 1st, 432th] we are …
Run Code Online (Sandbox Code Playgroud)

java for-loop stringtokenizer randomaccessfile

7
推荐指数
2
解决办法
886
查看次数

使用数组A的元素填充一个新数组,这些元素缺少数组B - Java

所以,基本上我有两个数组:

int[] listA = {2, -5, -121, 102, -35, -2, 0, -125, 802, -10};
int[] listB = {6, 99, -1, 12, 1, -2};
Run Code Online (Sandbox Code Playgroud)

我想填写一个新的数组(listD)所有listA缺少的元素listB.

输出应该是这样的:

输出:2,-5,-121,102,-35,0,-125,802,-10

我的代码如下:

int arraySize = 0; //Variable to determine size of the new array;
int difElements = 0; //Variable to count every different element;

for(int i = 0; i < listA.length; i++){
    for(int j = 0; j < listB.length; j++){
        if(listA[i] != listB[j]){
            difElements++;
        }
        if(difElements == listB.length){
        arraySize++; …
Run Code Online (Sandbox Code Playgroud)

java arrays

7
推荐指数
1
解决办法
149
查看次数

我应该声明变量尽可能接近它们将被使用的范围吗?

ReSharper通常会告诉我这一点,而且我仍然在寻找为什么这样做的充分理由.

我想到的唯一一件事就是声明它更接近它将使用的范围,可以避免在某些不需要的情况下初始化它(因为条件等)

与此相关的事情如下:

int temp;
foreach (var x in collection) { 
    temp = x.GetValue();
    //Do something with temp
}
Run Code Online (Sandbox Code Playgroud)

这真的不同于

foreach (var x in collection) {
    int temp = x.GetValue();
    //...
}
Run Code Online (Sandbox Code Playgroud)

我的意思是,第二个代码不是更昂贵,因为它每次都在分配内存吗?或两者都一样?当然,在完成循环之后,在第二个代码中垃圾收集器将关注temp变量,但不是在第一个...

c# variables scope

6
推荐指数
2
解决办法
2570
查看次数

我应该在重用方法之外或之内声明变量吗?

(我使用String作为示例,但它可以替换为Object> MB的内存)

做了很多这样的事情:

private static String mTempString = "";

private static void SomeMethod()
{
    mTempString = "Whatever Result";
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如果我是这样写的:

private static void SomeMethod()
{
    String mTempString = "Whatever Result";
}
Run Code Online (Sandbox Code Playgroud)

并在循环中使用它(每秒执行数百次)作为示例,Java会知道如何管理内存吗?记忆会有效地存在.(对不起,我现在不能自己测试一下)

哪个内存效率更高(忽略它们是小变量的事实)

--edit ---在这里找到一篇很好的文章解释它http://www.cs.berkeley.edu/~jrs/4/lec/08

java

6
推荐指数
2
解决办法
2842
查看次数

为什么允许在for循环中声明变量?

我是一名学生,目前在学校学习java(初学者),我对此感到疑惑.
我对其他语言的编码有基本的了解,我不了解Java中的特定内容.
如果我int在一个循环中声明一个变量(让我们用一个例子)并不意味着我一遍又一遍地声明同一个变量?

这就是我的意思:

for (int i = 0; i < 3; i ++) {
    int x = 5;
}
Run Code Online (Sandbox Code Playgroud)

这不是一回事吗?(这个不正确)

int x = 5;
int x = 5;
Run Code Online (Sandbox Code Playgroud)

如果没有,为什么?它们都是/两次声明相同的变量,虽然我知道在循环中变量是本地的,不能在循环之外使用(我不认为这是问题).
我也知道你不能两次声明相同的变量,所以我不明白第一个例子是如何合法的.

非常感谢:D

这个问题已经解决,感谢所有帮助过的人:D

java

6
推荐指数
1
解决办法
197
查看次数

在循环中声明变量或仅重新分配它是否更有效?

在编写循环时,我经常会对应该选择哪一个感到困惑.例如,

int sum;
for(int i=0; i<10; i++)
{
   sum=0;
   ...
   ....
}
Run Code Online (Sandbox Code Playgroud)

要么

for(int i=0; i<10; i++)
{
   int sum=0;
   ...
   ....
}
Run Code Online (Sandbox Code Playgroud)

比如,变量仅在此循环中需要.在程序的后期部分不需要它.我需要在循环开始时变量sum的值为0.哪一个更好的做法?在循环开始时重新初始化变量或重新声明它?哪一个更有效率?

java performance loops initialization declaration

5
推荐指数
1
解决办法
944
查看次数