Java - 汇总除特定部分之外的数组值
Java - Summing up values of Array except a specific section
我的任务是对数组的所有值求和,除了以 6 开头的部分,直到下一个 7 出现。 7 之后的值将再次添加到我的总和中。
这是我的解决方案之一:
if(nums == null){
return 0;
}else if(nums.length == 0){
return 0;
}else{
int sum = 0;
int countTill7 = 0;
boolean six = false;
for(int i = 0; i < nums.length; i++){
if(nums[i] != 6){
sum += nums[i];
}else if(nums[i] == 6){
six = true;
countTill7++;
}else if(six == true && nums[i - 1] == 7){
six = false;
sum += nums[i];
}
}
return sum;
}
我找不到问题..
以下是我对数组的所有值求和的方法,除了以 6 开头直到下一个 7 出现的部分
package codingbat.array3;
public class Sum67
{
public static void main(String[] args)
{
}
/**
* Return the sum of the numbers in the array,
* except ignore sections of numbers starting with a 6 and
* extending to the next 7
* (every 6 will be followed by at least one 7).
* Return 0 for no numbers.
*
* sum67({1, 2, 2}) → 5
* sum67({1, 2, 2, 6, 99, 99, 7}) → 5
* sum67({1, 1, 6, 7, 2}) → 4
*/
public int sum67(int[] nums)
{
int sum = 0;
boolean got6 = false;
for (int i = 0; i < nums.length; i++)
{
if (6 == nums[i])
{
got6 = true;
}
else if (got6 && 7 == nums[i])
{
got6 = false;
}
else if (!got6)
{
sum += nums[i];
}
}
return sum;
}
}
你也可以这样做,
boolean flag = true, oneTimeDone = false;
for(int i = 0; i < nums.length; i++){
if(flag){
if(nums[i] == 6 && !oneTimeDone){
flag = false;
}else{
sum += nums[i];
}
}else{
if(nums[i] == 7){
oneTimeDone = true;
flag = true;
}
}
}
更新输出:
我想你只是错过了一个布尔值
转
if(nums[i] != 6)
至
if(nums[i] != 6 && !six)
int sum = 0;
int countTill7 = 0;
boolean six = false, seven=false;
for(int i = 0; i < nums.length; i++){
if(six==false && seven==false){
if(nums[i]==6) six=true;
else sum += nums[i];
}else if(six==false || seven==false) {
if(nums[i]==7) seven=true;
}else {
sum += nums[i];
}
}
return sum;
不需要使用状态变量来指示我们是否处于“6 到 7”块中:
int sum = 0;
int i = 0;
while (i < nums.length) {
// Sum up the numbers until we find a 6.
while (i < nums.length && nums[i] != 6) {
sum += nums[i];
++i;
}
if (i < nums.length) {
// The i-th number is a 6.
// Increase i until the (i-1)-th number is a 7,
// since then i points to the next number we
// should add from.
do {
++i;
} while (i <= nums.length && nums[i - 1] != 7);
}
}
我的任务是对数组的所有值求和,除了以 6 开头的部分,直到下一个 7 出现。 7 之后的值将再次添加到我的总和中。
这是我的解决方案之一:
if(nums == null){
return 0;
}else if(nums.length == 0){
return 0;
}else{
int sum = 0;
int countTill7 = 0;
boolean six = false;
for(int i = 0; i < nums.length; i++){
if(nums[i] != 6){
sum += nums[i];
}else if(nums[i] == 6){
six = true;
countTill7++;
}else if(six == true && nums[i - 1] == 7){
six = false;
sum += nums[i];
}
}
return sum;
}
我找不到问题..
以下是我对数组的所有值求和的方法,除了以 6 开头直到下一个 7 出现的部分
package codingbat.array3;
public class Sum67
{
public static void main(String[] args)
{
}
/**
* Return the sum of the numbers in the array,
* except ignore sections of numbers starting with a 6 and
* extending to the next 7
* (every 6 will be followed by at least one 7).
* Return 0 for no numbers.
*
* sum67({1, 2, 2}) → 5
* sum67({1, 2, 2, 6, 99, 99, 7}) → 5
* sum67({1, 1, 6, 7, 2}) → 4
*/
public int sum67(int[] nums)
{
int sum = 0;
boolean got6 = false;
for (int i = 0; i < nums.length; i++)
{
if (6 == nums[i])
{
got6 = true;
}
else if (got6 && 7 == nums[i])
{
got6 = false;
}
else if (!got6)
{
sum += nums[i];
}
}
return sum;
}
}
你也可以这样做,
boolean flag = true, oneTimeDone = false;
for(int i = 0; i < nums.length; i++){
if(flag){
if(nums[i] == 6 && !oneTimeDone){
flag = false;
}else{
sum += nums[i];
}
}else{
if(nums[i] == 7){
oneTimeDone = true;
flag = true;
}
}
}
更新输出:
我想你只是错过了一个布尔值
转
if(nums[i] != 6)
至
if(nums[i] != 6 && !six)
int sum = 0;
int countTill7 = 0;
boolean six = false, seven=false;
for(int i = 0; i < nums.length; i++){
if(six==false && seven==false){
if(nums[i]==6) six=true;
else sum += nums[i];
}else if(six==false || seven==false) {
if(nums[i]==7) seven=true;
}else {
sum += nums[i];
}
}
return sum;
不需要使用状态变量来指示我们是否处于“6 到 7”块中:
int sum = 0;
int i = 0;
while (i < nums.length) {
// Sum up the numbers until we find a 6.
while (i < nums.length && nums[i] != 6) {
sum += nums[i];
++i;
}
if (i < nums.length) {
// The i-th number is a 6.
// Increase i until the (i-1)-th number is a 7,
// since then i points to the next number we
// should add from.
do {
++i;
} while (i <= nums.length && nums[i - 1] != 7);
}
}