int i = -1;while (++i < len) { if (val[i] == oldChar) { break; }} 为何需要它, 而不是直接遍历
时间: 2024-04-03 13:35:25 浏览: 15
好问题!这是因为在Java中,使用前置++操作符可以将变量i的值先加1再使用,而后置++操作符则是先使用变量i的值再加1。因此,使用前置++操作符可以避免在循环体中多次使用变量i时,每次都要执行一次加1操作,从而提高代码的效率。
在这个方法中,使用while循环遍历字符数组,并在循环体中查找要替换的字符。因为循环体中需要使用变量i的值,所以使用前置++操作符可以在循环体中避免重复执行加1操作,提高代码的效率。
如果不使用前置++操作符,而是直接遍历字符数组,在循环体中每次都执行一次加1操作,代码效率会变低,尤其是在字符数组比较大的情况下。因此,使用前置++操作符可以提高代码的效率。
相关问题
while (++i < len) { if (val[i] == oldChar) { break; }} 为何需要这个循环, 而不是直接遍历替换
这个循环的作用是在字符串中查找第一个要替换的字符,并返回该字符在字符串中的位置。如果要替换的字符不存在,则直接返回原字符串。
如果直接遍历字符数组并替换,会将所有要替换的字符都替换成新字符,而不仅仅是第一个要替换的字符。这样会导致结果不正确。
因此,在替换一个字符时,需要先找到要替换的字符在字符串中的位置,然后再进行替换。这个循环就是用来查找要替换的字符在字符串中的位置的。如果找到了要替换的字符,则退出循环,并将位置保存在变量i中。
当然,在这个方法中只替换一个字符,因此只需要查找一次。如果要替换多个字符,需要在循环体中继续查找并替换,直到所有要替换的字符都被替换完为止。
knap8( ) {int i,j,xl[n]; float sum = 0; i=1; max=-1; while(1) {while (i<= n and total + w[i]< = m) {total = total + w[i]; sum = sum + p[i]; xl[i]=1; i=i+l;} if(i=n+1 and max < sum) {max=sum; i=n; for(j=1;j<=n;j=j+1) x[j]=xl[j];} else x1[i]=0; while (bound( sum, total, i,m)<= max) {while (i> 0 and xl[i]<> 1) i=i-1; if(i=0) return; xl[i]=0; total = total - w[i]; sum = sum - p[i];} i=i+1; } }转换成python语言的代码
以下是转换后的 Python 代码:
```python
w = [0] * 100
p = [0] * 100
x = [0] * 100
x1 = [0] * 100
max_val = -1
total = 0
def knap8(n, m):
global max_val, total, w, p, x, x1
i = 1
while True:
while i <= n and total + w[i] <= m:
total += w[i]
sum_val += p[i]
x[i] = 1
i += 1
if i == n + 1 and max_val < sum_val:
max_val = sum_val
i = n
for j in range(1, n + 1):
x[j] = xl[j]
else:
x1[i] = 0
while bound(sum_val, total, i, m, w, p) <= max_val:
while i > 0 and x[i] != 1:
i -= 1
if i == 0:
return
x[i] = 0
total -= w[i]
sum_val -= p[i]
i += 1
def bound(sum_val, total, i, m, w, p):
bound_val = sum_val
j = i + 1
while j <= n and total + w[j] <= m:
bound_val += p[j]
total += w[j]
j += 1
if j <= n:
bound_val += (m - total) * p[j] / w[j]
return bound_val
def main8():
global max_val, total, w, p, x, x1
n, m = map(int, input().split())
for i in range(1, n + 1):
w[i], p[i] = map(float, input().split())
knap8(n, m)
for i in range(1, n + 1):
print(f"x{i} = {x[i]}")
print(f"The max value is {max_val}")
if __name__ == '__main__':
main8()
```
需要注意的是,原始的 C 语言代码存在一些语法错误,如 `total + w[i]< = m` 应该改为 `total + w[i] <= m`,因此在转换成 Python 代码时需要进行一些调整。同时,需要将函数的参数传递进去,以便在 Python 中使用。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)