Mit rontottam el? (java)
Ez a feladat:
Create a method that removes the middle (or the middle two) values of an array. This method removes a single element if the initial list has a odd length and two elements if the length is even. The method should return a new array.
(input: 3, 2, 6, 1, 0)
[3, 2, 1, 0]
(input: 1, 2, 3, 4)
[1, 4]
public class Week6Ex7 {
public void run(){
int[] numbs1 = {3, 2, 6, 1, 0};
int[] numbs2 = {1, 2, 3, 4};
int[] result = deleteMiddle(numbs1);
for (int i = 0; i < result.length; i++){
System.out.println(result[i]);
}
}
public int[] deleteMiddle(int[] theArray){
int sum = 0;
for (int i = 0; i < theArray.length; i++){
sum += theArray[i];
}
int[] tempArray;
if (sum % 2 == 0){
tempArray = new int[theArray.length - 2];
for (int i = 0; i <theArray.length; i++){
int p = 0;
if (i != (theArray.length/2) && i!= (theArray.length/2) + 1){
tempArray[p] = theArray[i];
}
p++;
}
} else{
tempArray = new int[theArray.length - 1];
for (int i = 0; i <theArray.length; i++){
int p = 0;
if (i != (theArray.length/2) + 1) {
tempArray[p] = theArray[i];
}
p++;
}
}
return tempArray;
}
public static void main(String[] args){
new Week6Ex7().run();
}
}
Mi ez a szummázás?
A tömb hossza a lényeg, nem az elemek összege...
public class Week6Ex7 {
public void run(){
int[] numbs1 = {3, 2, 6, 1, 0};
int[] numbs2 = {1, 2, 3, 4};
int[] result = deleteMiddle(numbs1);
for (int i = 0; i < result.length; i++){
System.out.println(result[i]);
}
}
public int[] deleteMiddle(int[] theArray){
int[] tempArray;
if (theArray.length % 2 == 0){
tempArray = new int[theArray.length - 2];
for (int i = 0; i <theArray.length; i++){
int p = 0;
if (i != (theArray.length/2) && i!= (theArray.length/2) + 1){
tempArray[p] = theArray[i];
}
p++;
}
} else{
tempArray = new int[theArray.length - 1];
for (int i = 0; i <theArray.length; i++){
int p = 0;
if (i != (theArray.length/2) + 1) {
tempArray[p] = theArray[i];
}
p++;
}
}
return tempArray;
}
public static void main(String[] args){
new Week6Ex7().run();
}
}
Itt van a "kijavított" verzió. Ha numbs1-el csinálom, 4 db nullát kapok. Ha numbs2-vel akkor meg ezt kapom: 2,0;
De jó, amikor még csak kb 2 hete programozól és úgy segítenek, hogy "mért nem tudod megcsinálni magadtól"
Kb 40 perc baszakodás után tettem ki a kérdést ... nem az első elakadásnál.
Ez lett a végleges kód amin már jól átment minden.
public class Week6Ex7 {
public void run(){
int[] numbs1 = {3, 2, 6, 1, 0};
int[] numbs2 = {1, 2, 3, 4};
int[] result = deleteMiddle(numbs2);
for (int i = 0; i < result.length; i++){
System.out.println(result[i]);
}
}
public int[] deleteMiddle(int[] theArray){
int[] tempArray;
int p = 0;
if (theArray.length % 2 == 0){
tempArray = new int[theArray.length - 2];
for (int i = 0; i <theArray.length; i++){
if (i != (theArray.length/2)){
if (i!= (theArray.length/2) - 1){
tempArray[p] = theArray[i];
p++;
}
}
}
} else{
tempArray = new int[theArray.length - 1];
for (int i = 0; i <theArray.length; i++){
if (i != theArray.length/2) {
tempArray[p] = theArray[i];
p++;
}
}
}
return tempArray;
}
public static void main(String[] args){
new Week6Ex7().run();
}
}
Még lehetne csinosítani, de ez kicsit rövidebb talán.
var theArray = new int[] { 1, 3, 4, 9, 7, 8 };
int middleIndex = theArray.Length / 2;
var tempList = new List<int>();
for (int i = 0; i < theArray.Length; i++)
{
if (i == middleIndex ||
(theArray.Length % 2 == 0 && i == middleIndex - 1))
{
continue;
}
tempList.Add(theArray[i]);
}
var result = tempList.ToArray();
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!