Day1-3.Arrays in Java




几乎所有的程序设计语言都支持数组。
在C和C++中使用数组是很危险的,因为C和C++中的数组就是内存块。
如果一个程序要访问其自身内存块之外的数组,或在数组初始化前使用内存(程序中常见的错误),都会产生难以预料的后果。
Java的主要目标之一是安全性,所以许多在C和C++里困扰程序员的问题在Java里不会再出现。
Java确保数组会被初始化,而且不能在它的范围之外被访问。
这种范围检查,是以每个数组上少量的内存开销及运行时的下标检查为代价的。
但由此换来的是安全性和效率的提高,因此付出的代价是值得的(并且Java又是可以优化这些操作)。
当创建一个数组对象时,实际上就是创建了一个引用数组,并且每个引用都会自动被初始化为一个特定值,该值拥有自己的关键字null。
一旦java看到null,就知道这个引用还没有指向某个对象。
在使用任何引用前,必须为其指定一个对象;如果试图使用一个还是null的引用,在运行时将会报错。
因此,常犯的数组错误在java中就可以避免。
还可以创建用来存放基本数据类型的数组。
同样,编译器也能确保这种数组的初始化,因为它会将这种数组所占的内存全部置零。
数组将在以后的章节中详细讨论。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是将给定的Java代码翻译为C++的版本: ```cpp #include <iostream> #include <vector> #include <queue> #include <cmath> using namespace std; int getResult(vector<int>& arr) { int n = sqrt(arr.size()); vector<vector<int>> matrix(n, vector<int>(n)); queue<pair<int, int>> q; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matrix[i][j] = arr[i * n + j]; if (matrix[i][j] == 1) { q.push({i, j}); } } } if (q.empty() || q.size() == arr.size()) { return -1; } int healthy = arr.size() - q.size(); vector<vector<int>> offsets = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int day = 0; while (!q.empty() && healthy > 0) { queue<pair<int, int>> newQ; while (!q.empty()) { pair<int, int> tmp = q.front(); q.pop(); int x = tmp.first, y = tmp.second; for (vector<int>& offset : offsets) { int newX = x + offset[0]; int newY = y + offset[1]; if (newX >= 0 && newX < n && newY >= 0 && newY < n && matrix[newX][newY] == 0) { matrix[newX][newY] = 1; healthy--; newQ.push({newX, newY}); } } } day++; q = newQ; } return day; } int main() { string input; getline(cin, input); vector<int> arr; size_t pos = 0; while ((pos = input.find(',')) != string::npos) { arr.push_back(stoi(input.substr(0, pos))); input.erase(0, pos + 1); } arr.push_back(stoi(input)); cout << getResult(arr) << endl; return 0; } ``` 请注意,上述代码只是翻译了给定的Java代码,并进行了一些必要的语法和数据结构的更改。如果您在使用时遇到任何问题,请提供更多信息以便我可以帮助您解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值