Ta in hundra tal och beräkna differenser
Tjena har fastnat lite på en uppgift som jag undrade om ngn kunde hjälpa mig med :
Indata består av 100 positiva heltal. Skriv programrader för beräkning av skillnaden mellan det största och det näst största talet.Använd två variabler big och nextBig där det största resp näst största av de hittillslästa talen hela tiden finns. Deklarera alla dina variabler.
Rubrik ändrad från "Har fastnat på en uppgift:" till nuvarande. En beskrivande rubrik underlättar för de som svarar, och hjälper till att skilja trådar från varandra. Läs gärna mer om rubriksättning här. /Smutstvätt, moderator
Välkommen!
Hur började du? Vad har du som första versionen av metoden?
Välkommen till pluggakuten, ge oss också lite bakgrund om kursen du läser. Är det universitetsnivå eller gymnasiet? Anledning till att jag frågar är för att beta om vi behöver ta hänsyn till beräkningskomplexitet. Det är rätt enkelt annars att hitta lösning som har beräkningskomplexoteten O(n).
Det är i java i högskolan första termin, jag har kommit så här långt :
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
double Big, NextBig,x;
x=scan.nextDouble();
Big=0;
NextBig=0;
if(x > scan.nextDouble()) {
Big= scan.nextDouble();
}
else if (x<scan.nextDouble())
{NextBig= scan.nextDouble();
}
System.out.print(Big+NextBig);
Jag tror det är menat att du ska skapa en array med 100 random tal eller något dylikt. Att mata in 100 tal förhand är absurt!
Ja tänkte det men saken är att vi har inte gått igenom array än, men jag tänkte hur skulle man kunna göra om man ska skriva in 3 tal istället för 100
Stilförslag:
- variabeldeklaration, initialisering först
- en deklaration per rad
- variabelnamn ska börja med gemen
Din kod kunde se ut så här:
public static void main(String[] args) {
// variabeldeklaration, initialisering
double big = 0.0;
double nextBig = 0.0;
double x;
Scanner scan = new Scanner(System.in);// processing
x = scan.nextDouble();
if(x > scan.nextDouble()) {
big = scan.nextDouble();
}
else if (x < scan.nextDouble()) {
nextBig = scan.nextDouble();
}
// output
System.out.print(big-nextBig);
}
Men nu har du ett par problem med processing:
- Du behöver någon loop för att bearbeta flera inmatningar.
- Du måste vara försiktig med scan.nextDouble(), eftersom du får ett nytt värde varje gång
- Jämförelse med big, nextBig verkar vara fel.
Känner du till pseudokod? Du kan beskriva algoritmen även i pseudokod.
ska man ha processing inuti loopen?
Dracaena skrev:Jag tror det är menat att du ska skapa en array med 100 random tal eller något dylikt. Att mata in 100 tal förhand är absurt!
Om man har 100 tal i en fil kan man ge den filen som indata till programmet.
Jag tycker programmet ska klara indata med godtyckligt antal tal. Då kan man använda t.ex. fem tal medan man testar programmet så kan läraren få komma med sin fil med 100 tal senare.
Exemplel på pseudokod:
Sätt big = 0
Sätt nextBig = 0
Läs in ett tal i variabeln talet.
Om talet > big så sätt big = talet.
För vart och ett av de återstående talen:
- Läs in ett tal i variabeln talet.
- Om talet > big så sätt nextBig = big och big = talet
- Annars: Om talet > nextBig så sätt nextBig = talet
Scanner scan=new Scanner(System.in);
System.out.print("Ange tal");
double big=0.0;
double nextBig=0.0;
double x=scan.nextDouble();
if(x > big) {
nextBig=big;
big= x;
}else if (x<nextBig){
nextBig=x;
}
System.out.print(big-nextBig);
}
Tillägg: 6 sep 2021 22:11
jag testade koden ovanför men det funkade inte
Använd gärna kodverktyget på kod som du har skrivit här. Det ser ut som {;} i verktygsraden. Då försvinner inte indenteringen och det blir lättare att läsa.
Din kod har ingen loop.
Den läser endast in ett enda tal.
Förslag?
Ja, det jag skrev i det här svaret
löste sig med detta :
Scanner scan=new Scanner(System.in);
System.out.print("Ange hur många tal och sedan vilka");
double big=0.0;
double nextBig=0.0;
double y=scan.nextDouble();
for(int i=0;i<y;i++) {
double x=scan.nextDouble();
if(x > big)
{
nextBig=big;
big= x;
}
else if (x>nextBig)
{
nextBig=x;
}
}
System.out.print(big-nextBig);