2 svar
70 visningar
Nomadity73 1
Postad: 12 apr 18:16

Hur kommer jag åt värdet på platsen i vektor där senaste inmatade heltalet sparats?

Jag har fått i uppgift att i en while-loop (eller do-while-loop) ta emot heltal till en vektor från användare. Det ska finnas 100 platser i vektorn, så det ska inte ändras. Användaren ska kunna välja hur många heltal hen vill mata in upp tills vektorn är full. Sedan ska jag med hjälp av en for-loop skriva ut endast det senast inmatade heltalet. Det är där jag kör fast. Hur kommer jag åt den senaste platsen i vektorn för att skriva ut dess värde? Jag är på nybörjarnivå, så det ska inte krävas något ytterligare bibliotek och så, förutom skannern. Tips och lösningsidéer tas tacksamt emot! Min kod ser för närvarande ut som nedan: 

 

// Importerar en skanner för att kunna läsa in inmatningar

import java.util.Scanner;

public class GY_Ex {   

public static void main(String[] args) {       

// kallar inläsningsfunktion       

Scanner scan = new Scanner(System.in);        

// deklarerar vektor med 100 platser       

int[] vector = new int [100];       

// initierar startvärde för while-loop        

int i = 0;        

// while loop loop för inmatningar, vektorns längd definierar loopens längd       

// med nästad if-sats för villkorad inmatning       

while ( i < vector.length ) {           

// utskrift till användaren           

System.out.print( "Mata in ett positivt heltal (ange -1 för att avsluta inläsning): " );           

// sparar heltalsinmatning           

int input = scan.nextInt();           

// villkorar inmatningar till enbart positiva tal            

if (input < 0 )                

break; 

// sparar inmatat heltal i vektorn samtidigt som platserna räknas upp           

vector[i++] = input;       

}       

// variabel för antalet inmatningar       

int count = i++;               

// for-loop för utskrift av sista inmatade heltalet       

for (i = 0; i <= count; i++) { 

// utskrift för att kolla av antal inmatningar  - fungerar men är inte efterfrågat i uppgiften!           

System.out.println(count);

// utskrift av sista inmatat tal - fungerar inte!            

System.out.println("Det sist inmatade heltalet är " + vector[i++]);       

}  

}

}

thedifference 495
Postad: 12 apr 21:59 Redigerad: 12 apr 22:31

Hej,

Använd {;}-knappen för att få snyggt formatterad kod:

// Importerar en skanner för att kunna läsa in inmatningar
import java.util.Scanner;

public class GY_Ex {   

    public static void main(String[] args) {       
    
        // kallar inläsningsfunktion       
        
        Scanner scan = new Scanner(System.in);        
        
        // deklarerar vektor med 100 platser       
        
        int[] vector = new int[100];       
        
        // initierar startvärde för while-loop        
        
        int i = 0;        
        
        // while loop loop för inmatningar, vektorns längd definierar loopens längd       
        
        // med nästad if-sats för villkorad inmatning       
    
        while ( i < vector.length ) {           
        
            // utskrift till användaren           
            System.out.print( "Mata in ett positivt heltal (ange -1 för att avsluta inläsning): " );           
            
            // sparar heltalsinmatning           
            int input = scan.nextInt();           
            
            // villkorar inmatningar till enbart positiva tal            
            if (input < 0 ) break; 
            
            // sparar inmatat heltal i vektorn samtidigt som platserna räknas upp 
            vector[i++] = input;       
        }       
    
        // variabel för antalet inmatningar       
        int count = i++;               
    
        // for-loop för utskrift av sista inmatade heltalet       
        for (i = 0; i <= count; i++) { 
        
            // utskrift för att kolla av antal inmatningar  - fungerar men är inte efterfrågat i uppgiften!           
            System.out.println(count);
            
            // utskrift av sista inmatat tal - fungerar inte!            
            System.out.println("Det sist inmatade heltalet är " + vector[i++]);       
        }  
    }
}

Du är fel ute med din for loop. Om du har matat in 4 tal så är även count 4. Sen eftersom villkoret är i <= count så kommer den köras 5 gånger. Det låter väl inte rätt att du ska loopa 5 gånger för att skriva ut ett enda värde?

Jag kommer till uppgiften senare, för jag vill först prata om dina i++. Som du kanske märker så hoppar din for loop över varannan iteration eftersom du ökar värdet på i även inne i loopen. När du sätter i++ så ökas värdet på i efter att det lästs.

vector[i++] = input; // Sätt input på värde på plats i i vector och öka sen i med 1 - klokt och korrekt använt i sammanhanget
int count = i++; // Sätt count lika med i, och öka sen i med 1 - meningslös ökning eftersom du inte använder detta i efteråt utan kör över det med ditt iterator-i
System.out.println("Det sist inmatade heltalet är " + vector[i++]); // Skriv ut värdet på plats i i vector och öka sedan i med 1, vilket ÄVEN händer efter varje iteration i for-loopen, vilket betyder att du hoppar två steg varje gång

Det finns inget semantiskt krav på att använda post-increment (i++), eller för den delen pre-increment (++i), utan vill man ha just i utan att pilla på värdet också kan man skriva bara i, utan några plus.

Nu till uppgiften, och som sagt, ta bort din for loop. Du har förstått att vector[0] skriver ut första värdet i vector. Du vill ha sista (ifyllda) värdet. Har du redan en variabel som håller koll på positionen för sista ifyllda värdet?

edit: Det låter på dig som om for-loopen är ett krav i uppgiften, men det är ett dåligt verktyg för ändamålet och ett dåligt ändamål för verktyget. Du kan skriva ut sista värdet med en enda rad kod. Ska du kanske skriva ut alla värden? Då är for-loop mycket vettigare.

Hej och välkommen till Pluggakuten!

Du har redan fått bra synpunkter på koden, men jag är lite nyfiken på uppgiften. Har du möjlighet att posta den här?

Svara
Close